2016-06-15 5 views
0

Я просто пытаюсь сортировать многомерный массив методом firstName. Я проводил много исследований и не могу найти ничего похожего на мою проблему.Как отсортировать многомерный массив по имени в php?

(
[0] => Array 
    (
     [lastName] => Mark 
     [firstName] => White 
    ) 

[1] => Array 
    (
     [lastName] => Brown 
     [firstName] => Peter 

[2] => Array 
    (
     [lastName] => Paul 
     [firstName] => Vo 
    ) 

[3] => Array 
    (
     [lastName] => MCLwous 
     [firstName] => Luis 
    ) 

[4] => Array 
    (
     [lastName] => Zumilia 
     [firstName] => Mario 
    ) 

[5] => Array 
    (
     [lastName] => Carl 
     [firstName] => Burns 
    ) 
) 
+0

http://php.net/manual/en/ function.array-multisort.php – jszobody

+0

@jszobody Я уже посмотрел на это и не могу понять, как реализовать мою задачу :( – progx

ответ

2

Вы можете использовать usort функцию, которая сортирует массивы, используя определенную пользователем функцию сравнения:

usort($array, function($v1, $v2) { return strcmp($v1['firstName'], $v2['firstName']); }); 

Или вы можете использовать sorted функцию от Nspl:

use function \nspl\a\sorted; 
$sorted = sorted($array, 'firstName'); 
+0

@lhor Burlachenko Большое спасибо! – progx

+1

Я действительно рекомендую использовать Laravel Collections если у вас есть к ним доступ, они очень приятны и делают гораздо более чистый код, чем использование raw php. – beeglebug

0

Первая мысль у меня есть - вручную проверять каждое «firstName» и сохранять firstName и userId в отдельном словаре. Затем перестройте элементы на другом пустом массиве, используя отсортированный словарь (возможно сортировка словаря по значению или клавише. Я видел ответы на это). Это быстрый ответ. :)

2

Как помечено вопрос laravel, я дам вам ответ, который использует эту рамочные, в частности методы, доступные вам при использовании Collections:

$sorted = collect($arr)->sortBy('firstName');

Note, который будет возвращать laravel Collection, а не php-массив.

Если после этого вы хотели отсортированные данные обратно в обычный массив PHP, вы бы добавить вызов toArray в конце:

$sorted = collect($arr)->sortBy('firstName')->toArray();