Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php асс.массив отсортировать и вывести / 9 сообщений из 9, страница 1 из 1
02.11.2017, 21:15
    #39547004
jjj32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php асс.массив отсортировать и вывести
Друзья, посоветуйте с массивом. Ключ его - ид юзера, есть имя и некое число. Надо отсортировать массив по числу и вывести топ 2

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$arr = aray();

$arr[123]["name"]='Иван';
$arr[123]["cnt"]='3';

$arr[456]["name"]='Михаил';
$arr[456]["cnt"]='7';

$arr[789]["name"]='Олег';
$arr[789]["cnt"]='2';



начитался до разбежания глаз а конкретно не влетает, хелп кто чем может!
...
Рейтинг: 0 / 0
02.11.2017, 23:59
    #39547071
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php асс.массив отсортировать и вывести
jjj32,

В базе дынных отсортируй - ORDER BY [number] DESC LIMIT 2
...
Рейтинг: 0 / 0
03.11.2017, 09:12
    #39547159
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php асс.массив отсортировать и вывести
MikkiMouse,

это стандартная учебная задача . Она периодически встречается на форумах...
jjj32, лови решение
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<?php
function print2 ($a) { // более красивый вывод на экран, лучше чем print_r
  $s = print_r($a,true);
  $replace = [chr(10).'(' => '(', chr(10).')' => ')', ')'.chr(10) =>  ')', '))' => ')'.chr(10).')', '    ' => '  ', '  ' => ' ',];
  $s = preg_replace('/\n  +\(/', '(', $s);
  $s = str_replace(array_keys($replace), array_values($replace), $s);
  echo '<pre style="font-size:12px;">', $s,'</pre>';
}

function isort(&$a, $field, $dir = true) {
  $t = call_user_func_array('array_merge_recursive', $a);
  asort($t[$field]);
  $so = array_keys($t[$field]);
  asort($so);
  $so = array_keys($so);
  $a = array_combine($so, $a);
  $dir ? ksort($a) : krsort($a);
}

$arr = [];
$arr[123]["name"]='Иван';
$arr[123]["cnt"]='3';
$arr[456]["name"]='Михаил';
$arr[456]["cnt"]='7';
$arr[789]["name"]='Олег';
$arr[789]["cnt"]='2';
echo '----------------------- Исходный массив -----------------------------';
print2($arr);

echo '----------------------- Отсортирован по значению поля "cnt", все значения -----------------------------';
isort($arr, 'cnt');
print2($arr);

echo '----------------------- Отсортирован по значению поля "cnt", первые 2 значения -----------------------------';
print2(array_slice($arr,0,2));
?>

...
Рейтинг: 0 / 0
03.11.2017, 11:43
    #39547272
jjj32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php асс.массив отсортировать и вывести
user89, спасибо огромное, с сортировкой буду кубатурить, а с выводом есть ли вариант с foreach?
Мне надо со значением ключа, именем и количеством дальше работать...
...
Рейтинг: 0 / 0
03.11.2017, 15:02
    #39547486
SharuPoNemnogu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php асс.массив отсортировать и вывести
зачем так сложно то

Код: php
1.
2.
3.
uasort($arr, function($a, $b) {
            return $a['cnt'] > $b['cnt'] ? -1 : 1;
        });
...
Рейтинг: 0 / 0
03.11.2017, 19:16
    #39547625
user89
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php асс.массив отсортировать и вывести
SharuPoNemnogu,
согласен...

jjj32, один из вариантов вывода через foreach
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?php
$arr = [];
$arr[123]['name']='Иван';
$arr[123]['cnt']='3';
$arr[456]['name']='Михаил';
$arr[456]['cnt']='7';
$arr[900]['name']='Олег';
$arr[900]['cnt']='2';
$arr[100]['name']='Степан';
$arr[100]['cnt']='5';

uasort($arr, function($a, $b) {
  return ($a['cnt'] > $b['cnt']) ? 1 : -1; // если поменять знак ">" на "<", то будет сортировка по убыванию
});

echo '<style> table {border-collapse:collapse;} td{border:1px solid #ccc; padding:4px;}</style> <table>';
foreach ($arr as $a => $b) {
  echo '<tr> <td>', $a;
  foreach ($b as $n => $c) {
    echo '<td>', $n, '<td>', $c;
  }
}
echo '</table>';
?>
...
Рейтинг: 0 / 0
04.11.2017, 00:32
    #39547706
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php асс.массив отсортировать и вывести
SharuPoNemnogu,

+100500

Щас вообще можно так:

Код: php
1.
2.
3.
    uasort($arr, function($a, $b) {
        return $a['cnt'] <=> $b['cnt'];
    });
...
Рейтинг: 0 / 0
04.11.2017, 20:23
    #39547822
jjj32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php асс.массив отсортировать и вывести
user89, с сортировкой все ок, а вот это не канает:

Код: php
1.
2.
3.
foreach ($b as $n => $c) {
    echo '<td>', $n, '<td>', $c;
}



первая часть ИД юзеров выводит, а тут стопор
...
Рейтинг: 0 / 0
04.11.2017, 20:45
    #39547830
jjj32
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
php асс.массив отсортировать и вывести
Разобрался, всем спасибо!
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php асс.массив отсортировать и вывести / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]