Сортировать массив с помощью usort - PullRequest
1 голос
/ 28 декабря 2011

У меня есть массив, который содержит значения север, восток, юг или запад.

Например, я получил массив со значениями в следующем порядке: юг, запад и север.

Теперь я хотел бы отсортировать массив как север, восток, юг и запад.

Так что в моем примере значения должны быть в следующем порядке: север, юг, запад.

Как я могу это сделать?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 28 декабря 2011

Вы также можете использовать array_intersect().Сохраняет порядок первого массива.В качестве первого параметра укажите массив всех основных направлений в правильном порядке, а в качестве второго - массив.

$cardinals = array( 'north', 'east', 'south', 'west' );
$input = array( 'south', 'west', 'north' );

print_r( array_intersect( $cardinals, $input ) );
0 голосов
/ 28 декабря 2011

Вы могли бы сделать что-то вроде этого (я полагаю, это то, что Сэмюэль Лопес также предлагает в комментариях):

$arr = array ('north', 'west', 'south', 'east', );

function compass_sort ($a, $b)
{
        $cmptable = array_flip (array (
                'north',
                /* you might want to add 'northeast' here*/
                'east',
                /* and 'southeast' here */
                'south',
                'west',
        ));

        $v1 = trim (mb_strtolower ($a));
        $v2 = trim (mb_strtolower ($b));

        if ( ! isset ($cmptable[$v1])
           || ! isset ($cmptable[$v2]))
        {
                /* error, no such direction */
        }

        return $cmptable[$v1] > $cmptable[$v2];
}

usort ($arr, 'compass_sort');

Это присваивает номер каждому направлению и сортирует по этому номеру, north будет присвоен ноль, east один (если вы не добавите что-то промежуточное) и т. Д.

...