2013-02-06 219 views
-1

我有一個多維相關數組,我嘗試按字母順序和按大小進行排序。檢查我現在正在獲取的例子,但現在我想按字母順序排序鍵「ACC,ABB,AAB」,如果有意義的話,不用編輯大小排序。按字母順序排列PHP關聯數組並按大小排序

arsort($myarray); 

// Returns an array sorted by its value size from biggest to smallest but need to to also sort it keys alpabetically without amongest keys that have the same size. 

$myArray = Array ( <--- Arrange this alphabetically and by size 
     [AAA] => Array (is 1st 
      [1] => 1 
      [2] => 1 
      [3] => 1 
      [4] => 1 
     )  
     [ACC] => Array (should be 3rd 
      [1] => 1 
      [2] => 1 
     )  
     [ABB] => Array (should be 2nd 
      [1] => 1 
      [2] => 1 
     )  
     [AAB] => Array (should be 1st 
      [1] => 1 
      [2] => 1 
     )  
     [AA] => Array (is 1st 
      [1] => 1 
     )  
     [AB] => Array (is 2nd 
      [1] => 1 
     ) 
    ) 
+0

通過此鏈接http://stackoverflow.com/questions/4151155/sorting-a-multi-dimensional-array-by-the-size-of-its-sub-array按大小排序 – zamil

回答

0

最後,我剛剛做了一個循環做我想要的不僅僅是一個內置函數。希望其理解我在解釋的代碼非常糟糕:S

arsort($myArray);          // Sorts array by size 
reset($myArray); 
$first_key = key($myArray); 
$count = count($myArray[$first_key], COUNT_RECURSIVE); // Get the largest value in array 

$temp_array = array(); 
$sorted_array = array(); 
for($i = $count; $i >= 1; $i--){      // Loops from the largest value to the smallest to create temp array for each size 
    foreach($myArray as $name => $values){   // Loops Through $myArray 
     if(count($myArray [$name]) == $i){   // Checks each Key in $myArray to see if size is the same as $I 
      $temp_array[$name] = $myArray[$name];  // Adds to $temp_array 
     } 

    } 
    ksort($temp_array);        // Sorts temp array created in loop above alpahbetically 
    $sorted_array += $temp_array;      // and adds its to a new array 
    $temp_array = array(); 
} 

這個循環允許您通過數組值的大小來排序,然後如果有具有相同值的多個關鍵是將整理這些字母

$myArray = Array ( // This array sorted by size only - arsort($myArray) 
    [AB] => Array (
     [1] => 1 
     [2] => 1 
     [3] => 1 
    )  
    [AA] => Array (
     [1] => 1 
     [2] => 1 
     [3] => 1 
    ) 
    [AC] => Array (
     [1] => 1 
     [2] => 1 
     [3] => 1 
    )  
    [BB] => Array (
     [1] => 1 
     [2] => 1 
    )  
    [BA] => Array (
     [1] => 1 
     [2] => 1 
    )  
    [CA] => Array (
     [1] => 1 
    )  
    [CB] => Array (
     [1] => 1 
    ) 
) 

$myArray = Array ( // Array Sorted By Size and Alphabetically - After loop 
    [AA] => Array (
     [1] => 1 
     [2] => 1 
     [3] => 1 
    )  
    [AB] => Array (
     [1] => 1 
     [2] => 1 
     [3] => 1 
    ) 
    [AC] => Array (
     [1] => 1 
     [2] => 1 
     [3] => 1 
    )  
    [BA] => Array (
     [1] => 1 
     [2] => 1 
    )  
    [BB] => Array (
     [1] => 1 
     [2] => 1 
    )  
    [CA] => Array (
     [1] => 1 
    )  
    [CB] => Array (
     [1] => 1 
    ) 
) 
1

使用鍵排序來排序您的數組。按您的要求要排序基於鍵 這對你WIL工作陣列...

ksort($myArray); 

接下來你通過大小進行分類的意思?我沒有得到你的問題的第二部分

+0

哦基本上當我的意思是大小我的意思是數組的大小,關鍵是持有鑰匙[AAA]擁有一個數組4. – str11

+1

所以基本上你想基於數組中的元素進行排序? –