PHP сортирует 2d массив по алфавиту по вложенному значению - PullRequest
7 голосов
/ 26 марта 2012

У меня есть массив PHP, который выглядит следующим образом:

Array{
    [0] {
        'id'       => '0',
        'title'    => 'foo',
        'address'  => '123 Somewhere',
    }
    [1] {
        'id'       => '1',
        'title'    => 'bar',
        'address'  => '123 Nowhere',
    }
    [2] {
        'id'       => '2',
        'title'    => 'barfoo',
        'address'  => '123 Elsewhere',
    }
    [3] {
        'id'       => '3',
        'title'    => 'foobar',
        'address'  => '123 Whereabouts',
    }
}

и я хочу отсортировать его по ключу 'title' во вложенных массивах, чтобы оно выглядело так:

Array{
    [1] {
        'id'       => '1',
        'title'    => 'bar',
        'address'  => '123 Nowhere',
    }
    [2] {
        'id'       => '2',
        'title'    => 'barfoo',
        'address'  => '123 Elsewhere',
    }
    [0] {
        'id'       => '0',
        'title'    => 'foo',
        'address'  => '123 Somewhere',
    }
    [3] {
        'id'       => '3',
        'title'    => 'foobar',
        'address'  => '123 Whereabouts',
    }
}

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

Я играл с ksort (), но безуспешно.

1 Ответ

30 голосов
/ 26 марта 2012

Вы должны использовать usort () (я предполагаю, что PHP 5.3+ здесь):

usort($your_array, function ($elem1, $elem2) {
     return strcmp($elem1['title'], $elem2['title']);
});

Edit: Я не заметил, что вы хотите сохранить связь с индексами, поэтому вам нужно вместо этого использовать uasort() с теми же параметрами.

Edit2: Вот версия, предшествующая PHP 5.3:

function compareElems($elem1, $elem2) {
    return strcmp($elem1['title'], $elem2['title']);
}

uasort($your_array, "compareElems");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...