Сортировать многомерный массив по определенному ключу
36079 просмотра
5 ответа
У меня есть массив:
Array (
[0] => stdClass Object (
[user_id] => 1
[ID] => 1
[user_login] => admin
[display_name] => admin
[user_email] => webbinformation@nacka.se
[meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";}
)
[1] => stdClass Object (
[user_id] => 4
[ID] => 4
[user_login] => ungtinflytande
[display_name] => ungtinflytande
[user_email] => klarakviberg@gmail.com
[meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";}
)
[2] => stdClass Object (
[user_id] => 5
[ID] => 5
[user_login] => inflytandepilot
[display_name] => inflytandepilot
[user_email] => hildalundgren@hotmail.com
[meta_value] => a:1:{s:6:\"author\";s:1:\"1\";}
)
[3] => stdClass Object (
[user_id] => 11
[ID] => 11
[user_login] => matsbohman
[display_name] => matsbohman
[user_email] => mats.bohman@nacka.se
[meta_value] => a:1:{s:6:\"editor\";s:1:\"1\";}
)
[4] => stdClass Object (
[user_id] => 12
[ID] => 12
[user_login] => klarakviberg
[display_name] => klarakviberg
[user_email] => nastasteg@nacka.se
[meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";}
)
)
... что я хочу отсортировать по display_name
ключу. В настоящее время я печатаю это так:
foreach ($blogusers as $bloguser) {
...
}
Как мне это сделать?
Автор: Himmators Источник Размещён: 12.11.2019 09:20Ответы (5)
44 плюса
Вы бы использовали usort () - http://php.net/usort
Мое предложение будет:
function cmp($a, $b)
{
return strcmp($a->display_name, $b->display_name);
}
usort($blogusers, "cmp");
foreach ($blogusers as $bloguser)
{
...
Автор: Repox
Размещён: 26.10.2010 09:32
13 плюса
Смотрите usort: http://php.net/manual/en/function.usort.php
usort($array, "my_cmp");
function my_cmp($a, $b) {
if ($a->display_name == $b->display_name) {
return 0;
}
return ($a->display_name < $b->display_name) ? -1 : 1;
}
Автор: Mike C
Размещён: 26.10.2010 09:34
9 плюса
Я нашел ответ на https://joshtronic.com/2013/09/23/sorting-associative-array-specific-key/
function sortBy($field, &$array, $direction = 'asc')
{
usort($array, create_function('$a, $b', '
$a = $a["' . $field . '"];
$b = $b["' . $field . '"];
if ($a == $b)
{
return 0;
}
return ($a ' . ($direction == 'desc' ? '>' : '<') .' $b) ? -1 : 1;
'));
return true;
}
А теперь вызовите эту функцию по определенному ключу массива.
$newArray = sortBy('display_name', $blogusers);
И если сортировать в asc / desc, просто добавьте один аргумент,
sortBy('display_name', $blogusers, 'desc');
Автор: Kishan Chauhan
Размещён: 02.03.2016 01:15
0 плюса
Ваш массив выглядит как результат запроса к базе данных. Если это так, позвольте базе данных выполнить сортировку: просто добавьте ORDER BY display_name
запрос.
0 плюса
Посмотрите на следующую статью. Он описывает, как использовать, usort()
а также описывает, как использовать, create_function()
чтобы вы могли использовать одну функцию для сортировки по разным полям (с требуемым направлением asc
или desc
).
http://phpave.com/sorting-associative-array-specific-key/
Автор: Shriganesh Shintre Размещён: 04.05.2015 08:38Вопросы из категории :
- php Как вы отлаживаете PHP-скрипты?
- php Заставьте XAMPP / Apache обслуживать файл вне htdocs
- php Как включить файлы PHP, которые требуют абсолютного пути?
- php Скрипт входа со скрытыми кнопками
- php How can I find unused functions in a PHP project
- php Эффективное изменение размера JPEG изображения в PHP
- sorting Как вы сортируете словарь по значению?
- sorting Объединить Сортировать связанный список
- sorting Natural (human alpha-numeric) sort in Microsoft SQL 2005
- sorting Как отсортировать список строк?
- sorting Как отсортировать список словарей по значению словаря?
- sorting Сортировка по строке, которая может содержать число
- ksort Сортировать многомерный массив по определенному ключу
- ksort ksort производит неправильный результат при работе с буквенно-цифровыми символами
- ksort Сортировка массивов в PHP. Мне нужно написать свои собственные функции asort () и ksort ()?
- ksort Sort array with numbers descending
- ksort Список каталогов по дате, и он удаляет один элемент из массива ... я что-то упустил?
- ksort Рекурсивный ксорт: не сортировать массив