Сортировка данных в массиве с помощью ключей

Добрый день.

У нас есть массив:

array(3) {
 [1]=>
 array(9) {
 [1]=>
 string(12) "aaandroid.ru"
 [2]=>
 string(1) "0"
 [3]=>
 string(1) "0"
 [4]=>
 string(1) "0"
 [5]=>
 string(1) "0"
 [6]=>
 string(1) "0"
 [7]=>
 string(5) "Test2"
 [8]=>
 string(10) "2012-03-27"
 [9]=>
 string(10) "2013-04-29"
 }
 [2]=>
 array(9) {
 [1]=>
 string(7) "aaga.ru"
 [2]=>
 string(1) "0"
 [3]=>
 string(1) "0"
 [4]=>
 string(1) "0"
 [5]=>
 string(1) "0"
 [6]=>
 string(1) "0"
 [7]=>
 string(8) "Test1"
 [8]=>
 string(10) "2008-02-21"
 [9]=>
 string(10) "2013-04-29"
 }
 [3]=>
 array(9) {
 [1]=>
 string(10) "aatrakc.ru"
 [2]=>
 string(1) "0"
 [3]=>
 string(1) "0"
 [4]=>
 string(1) "0"
 [5]=>
 string(1) "0"
 [6]=>
 string(1) "0"
 [7]=>
 string(8) "Test3"
 [8]=>
 string(10) "2012-03-27"
 [9]=>
 string(10) "2013-04-29"
 }

Скажите, пожалуйста, как сортировать данные в массиве с ключом?

Например, я бы хотел получить массив, где сортировка данных на элементе 7, т.е. в результате я хотел бы получить массив:

array(3) {
 [1]=>
 array(9) {
 [1]=>
 string(7) "aaga.ru"
 [2]=>
 string(1) "0"
 [3]=>
 string(1) "0"
 [4]=>
 string(1) "0"
 [5]=>
 string(1) "0"
 [6]=>
 string(1) "0"
 [7]=>
 string(8) "Test1"
 [8]=>
 string(10) "2008-02-21"
 [9]=>
 string(10) "2013-04-29"
 }
 [1]=>
 string(12) "aaandroid.ru"
 [2]=>
 string(1) "0"
 [3]=>
 string(1) "0"
 [4]=>
 string(1) "0"
 [5]=>
 string(1) "0"
 [6]=>
 string(1) "0"
 [7]=>
 string(5) "Test2"
 [8]=>
 string(10) "2012-03-27"
 [9]=>
 string(10) "2013-04-29"
 }
 [3]=>
 array(9) {
 [1]=>
 string(10) "aatrakc.ru"
 [2]=>
 string(1) "0"
 [3]=>
 string(1) "0"
 [4]=>
 string(1) "0"
 [5]=>
 string(1) "0"
 [6]=>
 string(1) "0"
 [7]=>
 string(8) "Test3"
 [8]=>
 string(10) "2012-03-27"
 [9]=>
 string(10) "2013-04-29"
 }

Скажите, пожалуйста, как это сделать?

2 ответа

Проверьте функцию usort PHP: http://www.php.net/manual/en/function.usort.php. Он обеспечивает (на месте) сортировку на основе обратного вызова, который вы можете создать.

Пример:

usort($myArray, function ($a, $b) {
 return strcmp($a[7], $b[7]);
});


Продолжающий ответ Hidde, если вы хотите изменить порядок сортировки, вы все равно usort() использовать usort(), но вы измените порядок параметров в вызове strcmp(). Это изменит тот из двух массивов, которые usort() видит как большее значение.

usort($myArray, function ($a, $b) {
 return strcmp($b[7], $a[7]);
});

Это использует анонимную функцию, поэтому она будет работать только на Php 5.3 или новее. Если вам нужно работать в 5.2, определите функцию, которая будет использоваться в качестве обратного вызова.

function mySortFunction($a, $b) {
 return strcmp($b[7], $a[7]);
}

usort($myArray, 'mySortFunction');

Видеть:

licensed under cc by-sa 3.0 with attribution.