2013-10-29 40 views
-4

我有這樣一多維陣列的多維數組:排序在PHP中使用的密鑰

[ 
    { 
     "C":[ 
     { 
      "status":"0", 
      "num":"3223" 
     }, 
     { 
      "status":"1", 
      "num":"45186" 
     }, 
     { 
      "status":"2", 
      "num":"8310" 
     }, 
     { 
      "status":"3", 
      "num":"82" 
     } 
     ] 
    }, 
    { 
     "F":[ 
     { 
      "status":"0", 
      "num":"1506" 
     }, 
     { 
      "status":"1", 
      "num":"31253" 
     }, 
     { 
      "status":"2", 
      "num":"1660" 
     }, 
     { 
      "status":"5", 
      "num":"1017" 
     } 
     ] 
    }, 
    { 
     "A":[ 
     { 
      "status":"0", 
      "num":"1506" 
     }, 
     { 
      "status":"1", 
      "num":"31253" 
     }, 
     { 
      "status":"2", 
      "num":"1660" 
     }, 
     { 
      "status":"5", 
      "num":"1017" 
     } 
     ] 
    }, 
] 

我想基於鍵(CFA)等進行排序此我想到了我的寫作用foreach s自己選擇排序方法,但我相信這不是一個很好的方法。我也可以使用ksort()usort(),但不知道如何。

我不需要任何人來寫整個代碼爲我請,我會明白什麼是去整理這樣一個數組的最佳方法的指導。

上面串實際上是陣列的json_encode()轉儲。

這裏是var_dump()

array(6) { [0] => array(1) { 'C' => array(8) { [0] => array(2) { ... } [1] => array(2) { ... } [2] => array(2) { ... } [3] => array(2) { ... } [4] => array(2) { ... } [5] => array(2) { ... } [6] => array(2) { ... } [7] => array(2) { ... } } } [1] => array(1) { 'F' => array(8) { [0] => array(2) { ... } [1] => array(2) { ... } [2] => array(2) { ... } [3] => array(2) { ... } [4] => array(2) { ... } [5] => array(2) { ... } [6] => array(2) { ... } [7] => array(2) { ... } } } [2] => array(1) { 'A' => array(8) { [0] => array(2) { ... } [1] => array(2) { ... } [2] => array(2) { ... } [3] => array(2) { ... } [4] => array(2) { ... } [5] => array(2) { ... } [6] => array(2) { ... } [7] => array(2) { ... } } } [3] => array(1) { 'D' => array(8) { [0] => array(2) { ... } [1] => array(2) { ... } [2] => array(2) { ... } [3] => array(2) { ... } [4] => array(2) { ... } [5] => array(2) { ... } [6] => array(2) { ... } [7] => array(2) { ... } } } [4] => array(1) { 'E' => array(8) { [0] => array(2) { ... } [1] => array(2) { ... } [2] => array(2) { ... } [3] => array(2) { ... } [4] => array(2) { ... } [5] => array(2) { ... } [6] => array(2) { ... } [7] => array(2) { ... } } } [5] => array(1) { 'B' => array(8) { [0] => array(2) { ... } [1] => array(2) { ... } [2] => array(2) { ... } [3] => array(2) { ... } [4] => array(2) { ... } [5] => array(2) { ... } [6] => array(2) { ... } [7] => array(2) { ... } } }} 

上面漂亮的打印

array(6) { 
    [0] => 
    array(1) { 
    'C' => 
    array(8) { 
     [0] => 
     array(2) { 
     ... 
     } 
     [1] => 
     array(2) { 
     ... 
     } 
     [2] => 
     array(2) { 
     ... 
     } 
     [3] => 
     array(2) { 
     ... 
     } 
     [4] => 
     array(2) { 
     ... 
     } 
     [5] => 
     array(2) { 
     ... 
     } 
     [6] => 
     array(2) { 
     ... 
     } 
     [7] => 
     array(2) { 
     ... 
     } 
    } 
    } 
    [1] => 
    array(1) { 
    'F' => 
    array(8) { 
     [0] => 
     array(2) { 
     ... 
     } 
     [1] => 
     array(2) { 
     ... 
     } 
     [2] => 
     array(2) { 
     ... 
     } 
     [3] => 
     array(2) { 
     ... 
     } 
     [4] => 
     array(2) { 
     ... 
     } 
     [5] => 
     array(2) { 
     ... 
     } 
     [6] => 
     array(2) { 
     ... 
     } 
     [7] => 
     array(2) { 
     ... 
     } 
    } 
    } 
    [2] => 
    array(1) { 
    'A' => 
    array(8) { 
     [0] => 
     array(2) { 
     ... 
     } 
     [1] => 
     array(2) { 
     ... 
     } 
     [2] => 
     array(2) { 
     ... 
     } 
     [3] => 
     array(2) { 
     ... 
     } 
     [4] => 
     array(2) { 
     ... 
     } 
     [5] => 
     array(2) { 
     ... 
     } 
     [6] => 
     array(2) { 
     ... 
     } 
     [7] => 
     array(2) { 
     ... 
     } 
    } 
    } 
    [3] => 
    array(1) { 
    'D' => 
    array(8) { 
     [0] => 
     array(2) { 
     ... 
     } 
     [1] => 
     array(2) { 
     ... 
     } 
     [2] => 
     array(2) { 
     ... 
     } 
     [3] => 
     array(2) { 
     ... 
     } 
     [4] => 
     array(2) { 
     ... 
     } 
     [5] => 
     array(2) { 
     ... 
     } 
     [6] => 
     array(2) { 
     ... 
     } 
     [7] => 
     array(2) { 
     ... 
     } 
    } 
    } 
    [4] => 
    array(1) { 
    'E' => 
    array(8) { 
     [0] => 
     array(2) { 
     ... 
     } 
     [1] => 
     array(2) { 
     ... 
     } 
     [2] => 
     array(2) { 
     ... 
     } 
     [3] => 
     array(2) { 
     ... 
     } 
     [4] => 
     array(2) { 
     ... 
     } 
     [5] => 
     array(2) { 
     ... 
     } 
     [6] => 
     array(2) { 
     ... 
     } 
     [7] => 
     array(2) { 
     ... 
     } 
    } 
    } 
    [5] => 
    array(1) { 
    'B' => 
    array(8) { 
     [0] => 
     array(2) { 
     ... 
     } 
     [1] => 
     array(2) { 
     ... 
     } 
     [2] => 
     array(2) { 
     ... 
     } 
     [3] => 
     array(2) { 
     ... 
     } 
     [4] => 
     array(2) { 
     ... 
     } 
     [5] => 
     array(2) { 
     ... 
     } 
     [6] => 
     array(2) { 
     ... 
     } 
     [7] => 
     array(2) { 
     ... 
     } 
    } 
    } 
} 
+0

不知道,我試過了,不能在第三級左右內取得。 –

+0

我甚至不知道你是否需要使用multisort。你不會只是頂級陣列嗎?它應該按alpha排序頂級鍵。在這種情況下,結果將是A,C,F。除非原始問題的定義不夠,否則應該對數組進行適當的分類。 OP,是否希望對頂層進行排序,然後按狀態進行排序? – jkinz

+0

@jkinz你的意思是ksort($ whateverArray)?由於某種原因,它不適用於我。雖然它確實應該。 –

回答

1

這裏是我做到了這一點。可能有更好的方法,但我們需要在內存中創建一個新的數組,並將字母字符當作實際鍵(基本上我們將刪除不需要的父數組)。然後我們使用kso​​rt實際對數組進行排序。

<?php 
$test = array(
    array("a" => array("status" =>1, "blah" => 2)), 
    array("f" => array("status" =>1, "blah" => 2)), 
    array("c" => array("status" =>1, "blah" => 2)), 
    array("b" => array("status" =>1, "blah" => 2)), 
    array("z" => array("status" =>1, "blah" => 2)) 
); 
foreach($test as $key=>$val){ 
    foreach($val as $key2=>$val2){ 
     $newTest[$key2] = $val2; 
    } 
} 
echo '<pre>'; 
var_dump($test); 
ksort($newTest); 
var_dump($newTest); 
echo '</pre>'; 
?> 
+0

謝謝,這工作! :) –

+0

它可能不是最有效的,所以如果你有很多對象,你可能想要考慮優化它的方法,但是如果你使用一個小數據集,它不應該對性能太有影響。很高興它對你有效! – jkinz