Сортировать многомерный массив по определенному ключу

php sorting ksort

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запрос.

Автор: ax. Размещён: 22.12.2015 06:21

0 плюса

Посмотрите на следующую статью. Он описывает, как использовать, usort()а также описывает, как использовать, create_function()чтобы вы могли использовать одну функцию для сортировки по разным полям (с требуемым направлением ascили desc).

http://phpave.com/sorting-associative-array-specific-key/

Автор: Shriganesh Shintre Размещён: 04.05.2015 08:38
Вопросы из категории :
32x32