2013-07-12 7 views
0

У меня есть этот массив массивов,Сортировка массивов внутри массива, используя общий ключ

Array 
(
[0] => Array 
    (
     [id] => 1 
     [title] => AP-2 (1) 
    ) 

[1] => Array 
    (
     [id] => 2 
     [title] => AC-1 (2) 
    ) 

[2] => Array 
    (
     [id] => 3 
     [title] => AB-3 (1) 
    ) 

[3] => Array 
    (
     [id] => 4 
     [title] => AD-2 (3) 
    ) 

[4] => Array 
    (
     [id] => 5 
     [title] => AE-2 (1) 
    ) 

), 

и мне нужно отсортировать его в некотором смысле, в котором он будет выглядеть так,

Array 
(
[0] => Array 
    (
     [id] => 1 
     [title] => AB-3 (1) 
    ) 

[1] => Array 
    (
     [id] => 2 
     [title] => AC-1 (2) 
    ) 

[2] => Array 
    (
     [id] => 3 
     [title] => AD-2 (3) 
    ) 

[3] => Array 
    (
     [id] => 4 
     [title] => AE-2 (1) 
    ) 

[4] => Array 
    (
     [id] => 5 
     [title] => AP-2 (1) 
    ) 

) 

То, что здесь произошло, в основном, сортирует массивы с помощью клавиши title в алфавитном порядке или, возможно, сортирует ее, используя natsort() или natcasesort(). Как я действительно сделаю сортировку? Заранее спасибо.

+0

Реализовать свой собственный своп функции (ele1, ele2), а затем реализовать алгоритм сортировки по вашему выбору. – Tro

ответ

2
function sorter($key){ 
    return function ($a, $b) use ($key) { 
     return strcmp($a[$key], $b[$key]); 
    }; 
} 
usort($arr, sorter('title')); 
var_dump($arr); 

Для версий PHP до 5.3, использование:

function sorter($arr, $index) { 
    foreach($arr as $key => $value) { 
     $arr2[$key] = strtolower($value[$index]); 
    } 
    asort($arr2); 
    foreach($arr2 as $key =>$value) { 
     $arr3[] = $arr[$key]; 
    } 
    return $arr3; 
} 
var_dump(sorter($arr, 'title')); 
+0

@CHiRiLo - я запустил код, и он не дал мне синтаксической ошибки. Вывод показан выше. –

+0

@CHiRiLo - '$ a' и' $ b' представляют массивы с числовыми ключами, такими как '[0] => array ('id' => 3, '$ title' => 'AB-3')'. При каждом сравнении '$ a' и' $ b' будут представлять разные массивы, сравнивая строковое значение «title». –

+0

Я делаю это правильно, я назначил первый массив выше переменной '$ arr', а затем в вашем решении я заменил' $ row_array' '$ arr'. Правильно ли это было? –

Смежные вопросы