2010-03-30 3 views
3

Мне нужно, чтобы отсортировать массив, который может выглядеть следующим образом:Сортировка многомерного массива

$array[4][0] = array('id' => 1, 'value' => 2); 
$array[3][2] = array('id' => 0, 'value' => 3); 
$array[4][1] = array('id' => 1, 'value' => 0); 
$array[1][3] = array('id' => 2, 'value' => 1); 
$array[1][1] = array('id' => 3, 'value' => 0); 
$array[3][0] = array('id' => 2, 'value' => 1); 
$array[3][1] = array('id' => 1, 'value' => 0); 
$array[1][2] = array('id' => 3, 'value' => 2); 
$array[1][0] = array('id' => 2, 'value' => 1); 
$array[2][1] = array('id' => 0, 'value' => 2); 
$array[2][4] = array('id' => 3, 'value' => 1); 

Но должен быть отсортирован и возвращается, как это:

$array[1][0] = array('id' => 2, 'value' => 1); 
$array[1][1] = array('id' => 3, 'value' => 0); 
$array[1][2] = array('id' => 3, 'value' => 2); 
$array[1][3] = array('id' => 2, 'value' => 1); 
$array[2][1] = array('id' => 0, 'value' => 2); 
$array[2][4] = array('id' => 3, 'value' => 1); 
$array[3][0] = array('id' => 2, 'value' => 1); 
$array[3][1] = array('id' => 1, 'value' => 0); 
$array[3][2] = array('id' => 0, 'value' => 3); 
$array[4][0] = array('id' => 1, 'value' => 2); 
$array[4][1] = array('id' => 1, 'value' => 0); 

Может кто-нибудь мне помочь? Он должен сортировать оба индекса массива от наименьшего до максимального значения индекса. Звучит достаточно просто, но у меня самое сложное время, пытаясь понять это, сохраняя при этом ценности.

Пожалуйста, помогите кто-нибудь ...

+0

положить 4 пробела перед каждой строки, чтобы форматировать их , –

ответ

7

Решение quick'n'dirty может выглядеть примерно так:

// Sort the outer array 
ksort($array); 
// Sort each inner array 
foreach($array as &$innerArray) 
{ 
    ksort($innerArray); 
} 
+0

Ничего себе, потрясающе, спасибо ОЧЕНЬ МНОГО! Почему это грязное решение? – SoLoGHoST

+0

@sologhost: Наверное, потому что это очень специализированный код. Другие написали функцию, которую можно повторно использовать для сортировки массивов с произвольными размерами по ключам. –

+0

Быстро и грязно часто бывает лучшим. – Evert

3

Вы хотите отсортировать его по ключу затем, а не значений: http://se.php.net/manual/en/function.ksort.php или http://se.php.net/manual/en/function.uksort.php

Редактировать, Пример;

function sorter(array &$multidimensional) { 
    foreach ($multidimensional as &$current) { 
     if (is_array($current)) 
      sorter($current); 
    } 
    ksort($multidimensional); 
} 
+0

Можете ли вы привести мне пример, пожалуйста? Я здесь смущен. У меня есть массив, который возвращает оба измерения. Как я могу сделать оба ключа одновременно? – SoLoGHoST

+0

@sologhost: Это не делается в то же время. Во-первых, в цикле 'foreach' ** каждый элемент/child/entry ** текущего массива проверяется, является ли он массивом или нет, и если да, то он сортируется. В конце сортируется «основной массив». –

1

Что-то вроде этого следует сделать это:

function ksort_recursive(&$arr) { 
    foreach($arr as $key => &$value) { 
     if(is_array($value)) { 
      ksort_recursive($value); 
     } 
    } unset($value); 
    ksort($arr); 
} 

ksort_recursive($array); 
Смежные вопросы