2017-06-06 110 views
0

陣列是這樣的(我使用PHP)如何在PHP排序這種類型的複雜的三維陣列的

array(2){[0]=> 
      {[0]=>"DEF"=> 
         {[0]=>"a",[1]=>"c",[2]=>"b"}, 
       [1]=>"ABC"=> 
         {[0]=>"f",[1]=>"d",[2]=>"e"}}, 
     [1]=> 
      {[0]=>"DEF"=> 
         {[0]=>"h",[1]=>"i",[2]=>"g"}, 
      [1]=>"ABC"=> 
         {[0]=>"k",[1]=>"l",[2]=>"j"} 
      } 
     } 

我想是排序它像的第一個條目,即[0]索引有兩個條目DEF和ABC所以它應該排序ABC和DEF然後在ABC也應該排序ABC。

最終的結果應該是這樣的

array(2){[0]=> 
      {[0]=>"ABC"=> 
         {[0]=>"d",[1]=>"e",[2]=>"f"}, 
       [1]=>"DEF"=> 
         {[0]=>"a",[1]=>"b",[2]=>"c"}}, 
     [1]=> 
      {[0]=>"ABC"=> 
         {[0]=>"j",[1]=>"k",[2]=>"l"}, 
      [1]=>"DEF"=> 
         {[0]=>"g",[1]=>"h",[2]=>"i"} 
      } 
     } 

在此先感謝

+5

[閱讀如何提出一個很好的問題(https://stackoverflow.com/help/how-to-ask) –

+3

可能的重複[如何在PHP中對數組和數據進行排序?](https://stackoverflow.com/questions/17364127/how-can-i-sort-arrays-and-data-in-php) – hassan

+0

什麼是這個符號表示「[0] =>」ABC「=>」?假設位置[0]的值爲「ABC」,「{[0] =>」d「,[1] =>」e「,[2] =>」f「}」會進入什麼位置?這是陣列中的第二個位置嗎?它是一個名爲「ABC」的鍵的子陣列嗎? – MikeBergerUS

回答

0

PHP有一個自定義排序選項。試試這個: http://php.net/manual/en/function.usort.php

我還沒有使用它,但我以前發現它,並記住它存在。

+0

我無法定義如何使用此自定義排序爲我需要的目的。 – Rahul

+0

正如你所指出的那樣,這是一個複雜的3D陣列,你的平均排序不會削減它。您可以編寫自己的排序算法,也可以學習使用usort。 –

0

使用sort將解決問題

$a = array(
      array(
       "ABC"=>array("d","e","f"), 
       "DEF"=>array("a","b","c") 
       ), 

      array(
       "ABC"=>array("j","k","l"), 
       "DEF"=>array("g","h","i") 
       ) 
      ); 

    sort($a); 
    var_dump($a); 

結果

array(2) { 
    [0]=> 
    array(2) { 
    ["ABC"]=> 
    array(3) { 
     [0]=> 
     string(1) "d" 
     [1]=> 
     string(1) "e" 
     [2]=> 
     string(1) "f" 
    } 
    ["DEF"]=> 
    array(3) { 
     [0]=> 
     string(1) "a" 
     [1]=> 
     string(1) "b" 
     [2]=> 
     string(1) "c" 
    } 
    } 
    [1]=> 
    array(2) { 
    ["ABC"]=> 
    array(3) { 
     [0]=> 
     string(1) "j" 
     [1]=> 
     string(1) "k" 
     [2]=> 
     string(1) "l" 
    } 
    ["DEF"]=> 
    array(3) { 
     [0]=> 
     string(1) "g" 
     [1]=> 
     string(1) "h" 
     [2]=> 
     string(1) "i" 
    } 
    } 
} 
+0

如果子陣列的長度不同,則根據子陣列的長度排序,而不是按字母順序排列 – Rahul