2014-12-05 2 views
0

Есть ли способ отсортировать массив ассоциативных массивов по длине одного из элементов? То, что я пытаюсь сделать, - это упорядочить массивы с наименьшей длины описания.PHP сортировать массив ассоциативных массивов по размеру элемента/размер строки

$some_array = []; 
$some_array[0] = ['name'=>'a name','description'=>'a description']; 
$some_array[1] = ['name'=>'a name1','description'=>'a description 1']; 
$some_array[2] = ['name'=>'a name2','description'=>'a description two for the third array element']; 
$some_array[3] = ['name'=>'a name3','description'=>'a description three']; 

В примере выше $some_array[2] должен прийти первым с последующим 3 затем 1 затем 0.

+3

Используйте [usort()] (http://www.php.net/manual/en/function.usort.php) –

+2

'usort ($ some_array, function ($ a, $ b) {return (strlen ($ a ['description']> strlen ($ b ['description']) 1: -1;}' –

ответ

2

PHP> = 5.5.0, необходимое для array_column:

array_multisort(array_map('strlen', array_column($some_array, 'description')), 
       SORT_DESC, 
       $some_array); 
+0

Thats brilliant thank you :) –

+0

fyi: [github.com/ramsey/array_column: Предоставляет функции для array_column() для проектов с использованием PHP раньше версии 5.5] (https: // github.com/ramsey/array_ колонка). хороший ответ кстати. –

+0

Да, спасибо @RyanVincent – AbraCadaver

2

Используйте usort для сортировки массивов на основе пользовательских параметров.

usort($array, function($a, $b) { 
    return strlen($b['description']) - strlen($a['description']); 
}); 
var_dump($array) 
+1

Исправить, но вероятно, более читаемым, используя операторы '<' or '>'. – Victory