2013-02-06 221 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

所以基本上你想基于数组中的元素进行排序? –