2010-03-30 230 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個空格前面的每一行進行格式化。 – 2010-03-30 07:19:26

回答

7

一個quick'n'dirty解決方案可能看起來像:

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

哇,真棒,非常感謝你!爲什麼它是一個骯髒的解決方案? – SoLoGHoST 2010-03-30 07:34:30

+0

@sologhost:可能是因爲它是非常專業的代碼。其他人寫了一個函數,可以重新使用鍵來按任意維數排序數組。 – 2010-03-30 07:46:25

+0

快速和骯髒往往是最好的。 – Evert 2010-03-30 07:56:55

3

你想通過鍵,然後對它進行排序,而不是值:http://se.php.net/manual/en/function.ksort.phphttp://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 2010-03-30 07:27:19

+0

@sologhost:這不是在同一時間完成的。首先,在'foreach'循環中,檢查當前數組的每個元素/子項/項**是否是數組,如果是,則對它進行排序。最後,「主陣列」進行排序。 – 2010-03-30 07:48:28

1

像這樣的東西應該這樣做:

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

ksort_recursive($array);