2014-07-03 93 views
1

排序多維數組最簡單的方法是什麼?我需要排序,使輸出顯示與子陣列值的最高計數那麼由子陣列的鍵按字母順序排序:PHP通過數值計數排序子數組,然後通過子數組鍵

因此,像這樣:

MyArray(
    subarray4('val1') 
    subarray2('val1') 
    subarray3('val1', 'val2', 'val3') 
    subarray1('val1', 'val2', 'val3') 
) 

會看更是這樣的:

MyArray(
    subarray1('val1', 'val2', 'val3') 
    subarray3('val1', 'val2', 'val3') 
    subarray2('val1') 
    subarray4('val1') 
) 
+1

複製? 「PHP按項目數排序多維數組」http://stackoverflow.com/questions/7433569/php-sort-a-multidimensional-array-by-number-of-items和「通過子陣列數排序數組」http ://stackoverflow.com/questions/14704634/sorting-array-by-count-of-subarray – bloodyKnuckles

+0

沒有那些幫助,因爲他們按子數排序的關鍵數字,我想按每個子數組中的數值排序。 – deejuk

回答

0

兩個步驟這裏,根據子陣列數,然後通過循環陣列排序每個子陣列「字母數字」第一排序陣列。

$myArray = array(
    array('val1', 'val2'), 
    array('val3'), 
    array('val7', 'val6', 'val5', 'val4'), 
    array('val8', 'val9', 'val10'), 
); 

// sort primary array by subarray count 
uasort($myArray, function ($a, $b) { 
    $a = count($a); 
    $b = count($b); 
    return ($a == $b) ? 0 : (($a > $b) ? -1 : 1); 
}); 

// now sort each subarray alphanumerically 
foreach ($myArray as $key => $arr) { 
    natsort($myArray[$key]); // letters - alpha, numbers - numeric 
    // note: ignoring $arr because sorting it does not affect $myArray 
} 

print '<pre>'; 
print_r($myArray); 
print '</pre>'; 

輸出:

Array 
(
    [2] => Array 
     (
      [3] => val4 
      [2] => val5 
      [1] => val6 
      [0] => val7 
     ) 

    [3] => Array 
     (
      [0] => val8 
      [1] => val9 
      [2] => val10 
     ) 

    [0] => Array 
     (
      [0] => val1 
      [1] => val2 
     ) 

    [1] => Array 
     (
      [0] => val3 
     ) 

) 

uasort排序算法被切斷,從這裏粘貼:Sorting array by count of subarray

+1

感謝一堆工作很好,不得不添加is_array第二類,因爲帶有單個項目的潛艇投擲錯誤 – deejuk

0
$array = array(
    array('val1'), 
    array('val1'), 
    array('val1', 'val2', 'val3'), 
    array('val1', 'val2', 'val3'), 
); 

function sortByCount($a, $b) { 
    $a = count($a); 
    $b = count($b); 

    if($a == $b) { 
     return 0; 
    } 

    return ($a > $b) ? -1 : 1; 
} 

uasort($array, 'sortByCount');