2014-10-23 3 views
0

У меня есть этот массив:PHP сортировки многомерный по возрастанию массив ключей

Array => (
    [0] => Array(
     [a] => hello, 
     [b] => world 
    ), 
    [1] => Array(
     [a] => bye, 
     [b] => planet 
    ), 
    ..... 
) 

И мне нужна функция для сортировки в этом:

Array => (
    [0] => Array(
     [a] => bye, 
     [b] => planet 
    ), 
    [1] => Array(
     [a] => hello, 
     [b] => world 
    ), 
    ..... 
) 

Been часов, пытаясь и я схожу с ума, пожалуйста, помогите меня.

Спасибо!

+0

Что является основой для поведения сортировки вы хотите? Почему элементы должны отображаться при сортировке? Это не ясно в вашем вопросе. Является ли он алфавитным порядком по любому значению в индексе 'a'? –

ответ

1

Если вы хотите отсортировать массив на основе содержимого всех строк в массиве, вам придется применить некоторую логику к сортировке. Использование usort позволяет нам выполнить произвольную функцию для выполнения сравнения.

usort($my_array, function ($a, $b) { 
    return strcasecmp(implode($a), implode($b)); 
}); 

Таким образом, он будет сравнивать два массива следующим образом:

array 1 = [ 'foo', 'bar' ] 
array 2 = [ 'baz', 'quux' ] 
array 1 is converted to "foobar" 
array 2 converted to "bazquux" 
compare strings "foobar" to "bazquux" 
-> "bazquux" comes first alphabetically, so strcasecmp() return positive integer 
-> usort receives the positive integer which informs its sorting algorithm 
+0

И прежде, чем кто-нибудь скажет так, да, я знаю, что это не касается упорядочения дочерних массивов, и я знаю, что это сломается, если массив многоуровневый. – amphetamachine

0

Вы можете использовать array_reverse(). PHP имеет множество встроенных функций массива. http://php.net/manual/en/ref.array.php

$test = Array (
    0 => Array(
     'a' => 'hello', 
     'b' => 'world' 
), 
    1 => Array(
     'a' => 'bye', 
     'b' => 'planet' 
    ), 
); 
$reverse = array_reverse($test); 
print_r($reverse); 
Array ( 
    [0] => Array ( 
     [a] => bye 
     [b] => planet 
    ) 
    [1] => Array ( 
     [a] => hello 
     [b] => world 
    ) 
) 
+0

OP сказал сортировку, а не наоборот. Как насчет подразумеваемых произвольных элементов в OP '...'? – amphetamachine

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