Сортировка массива по определенному ключу - PullRequest
3 голосов
/ 08 июля 2010

У меня есть следующий массив:

Array
(
    [Places] => Array
        (
            [public] => 0
            [entities] => Array
                (
                    ...
                )
        )
    [Issues] => Array
        (
            [public] => 1
            [entities] => Array
                (
                    ...
                )
        )

    [Source] => Array
        (
            [public] => 0
            [entities] => Array
                (
                    ...
                )
        )
)

Я бы хотел сортировать по массиву по открытому ключу. Я знаю, что мне, возможно, придется использовать ksort или usort, но я не уверен, как это реализовать.

Любые идеи будут великолепны, спасибо!

Ответы [ 6 ]

4 голосов
/ 08 июля 2010
usort($array, function ($a, $b) { return $a["public"] - $b["public"]; });
1 голос
/ 08 июля 2010

Вот интересная ссылка: http://www.the -art-of-web.com / php / sortarray /

Я бы попробовал

usort(usort(array, function), function);

Я могу попробовать пример кода по запросу, но информация уже есть для взятия.

0 голосов
/ 08 июля 2010

Попробуйте это:

$code = "return (-1*strnatcmp(\$a['public'], \$b['public']));";
uasort($array, create_function('$a,$b', $code));
0 голосов
/ 08 июля 2010

Вы можете использовать usort с функцией обратного вызова.

function cmp($a, $b) {
  return $a['public'] == $b['public'] ? 0 : $a['public'] > $b['public'] ? 1 : -1;
}

usort($array, "cmp");
0 голосов
/ 08 июля 2010

Общий способ сделать это с помощью array_multisort состоит в том, чтобы поместить свое значение сортировки в свой собственный массив и затем отсортировать оба массива, используя его в качестве основного массива сортировки.1005 * ';$ sort = array ();foreach ($ test as $ k => $ a) {$ sort [$ k] = $ a ['public'];} // размещение $ sort первым в array_multisort приводит к сортировке $ test в том же порядке, что и значения в $ sort array_multisort ($ sort, SORT_ASC, $ test);echo '

';
print_r($test);
echo '
';
0 голосов
/ 08 июля 2010

посмотрите на это, используя array_multisort:

<code>$test   =   array(
        'Places' => array(
            'public' => 0,
            'entities' => array(

            )
        ),
        'Issues' => array(
            'public' => 1,
            'entities' => array()
        ),
        'Source' => array(
            'public' => 0,
            'entities' => array()
        )
    );

    echo '<pre>';
    print_r($test);
    echo '
';array_multisort ($ тест, SORT_ASC, $ тест);echo '
';
    print_r($test);
    echo '
';
...