powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / php асс.массив отсортировать и вывести
9 сообщений из 9, страница 1 из 1
php асс.массив отсортировать и вывести
    #39547004
jjj32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, посоветуйте с массивом. Ключ его - ид юзера, есть имя и некое число. Надо отсортировать массив по числу и вывести топ 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
php асс.массив отсортировать и вывести
    #39547071
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jjj32,

В базе дынных отсортируй - ORDER BY [number] DESC LIMIT 2
...
Рейтинг: 0 / 0
php асс.массив отсортировать и вывести
    #39547159
Фотография user89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
php асс.массив отсортировать и вывести
    #39547272
jjj32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user89, спасибо огромное, с сортировкой буду кубатурить, а с выводом есть ли вариант с foreach?
Мне надо со значением ключа, именем и количеством дальше работать...
...
Рейтинг: 0 / 0
php асс.массив отсортировать и вывести
    #39547486
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем так сложно то

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

+100500

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

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

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



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


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