2013-02-14 68 views
0

我已經瀏覽了有關在堆棧溢出中對PHP中的多維數組進行排序的所有答案,但沒有人直接回答了我的問題。在PHP中對多維數組進行高級排序

從我所瞭解,我應該使用無論是PHP usort功能或PHP array_multisort功能不同的答案,但我不知道如何將這些應用到我的非常具體的陣列結構:

這裏是我的可變$array

Array 
(
    [0] => Array 
     (
      [field1] => 10 
      [field2] => 100 
      [field3] => 100 
      [subarray] => Array 
       (
        [0] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => 100 
         ) 

        [1] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => abcORDERBYTHIS 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [field1] => 10 
      [field2] => 100 
      [field3] => 100 
      [subarray] => Array 
       (
        [0] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => 100 
         ) 

        [1] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => ghiORDERBYTHIS 
         ) 

       ) 

     ) 

    [2] => Array 
     (
      [field1] => 10 
      [field2] => 100 
      [field3] => 100 
      [subarray] => Array 
       (
        [0] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => 100 
         ) 

        [1] => Array 
         (
          [field1] => 10 
          [field2] => 100 
          [field3] => defORDERBYTHIS 
         ) 

       ) 

     ) 

) 

我希望能夠將此陣列由最後陣列的field3subarray排序。訪問此元素與PHP很容易end功能,像這樣:

<?php 
foreach($array as $array_single){ 
    foreach(end($array_single['subarray']) as $sub_array){ 
     echo $sub_array; 
    } 
} 
?> 

,從現在起我被困在如何具體按字母順序排序此多維數組,使我們得到以下結果:

  • $array[0] - 遺蹟之上,因爲field3abcORDERBYTHIS
  • $array[2] - 跳轉到中間,因爲field3defORDERBYTHIS
  • $array[1] - 在底部,現在是因爲field3值是事先ghiORDERBYTHIS

謝謝!

+0

這種高級陣列排序往往是DIY。 – 2013-02-14 17:25:46

+0

哎喲@JasonMcCreary - 不是我想聽的! ;) – 2013-02-14 17:28:03

+0

對不起。當PHP超過100個數組函數時,沒有銀彈。這並不是說組合可能無法爲你提供你想要的。 – 2013-02-14 17:43:46

回答

1

嘗試此代碼:

$array = Array(); 

$arraytemp['field1'] = 10; 
$arraytemp['field2'] = 100; 
$arraytemp['field3'] = 100; 
$arraytemp['subarray'][0]["field1"] = 10; 
$arraytemp['subarray'][0]["field2"] = 100; 
$arraytemp['subarray'][0]["field3"] = 100; 
$arraytemp['subarray'][1]["field1"] = 10; 
$arraytemp['subarray'][1]["field2"] = 100; 
$arraytemp['subarray'][1]["field3"] = "abcORDERBYTHIS"; 

$array[] = $arraytemp; 

$arraytemp['field1'] = 10; 
$arraytemp['field2'] = 100; 
$arraytemp['field3'] = 100; 
$arraytemp['subarray'][0]["field1"] = 10; 
$arraytemp['subarray'][0]["field2"] = 100; 
$arraytemp['subarray'][0]["field3"] = 100; 
$arraytemp['subarray'][1]["field1"] = 10; 
$arraytemp['subarray'][1]["field2"] = 100; 
$arraytemp['subarray'][1]["field3"] = "ghiORDERBYTHIS"; 

$array[] = $arraytemp; 

$arraytemp['field1'] = 10; 
$arraytemp['field2'] = 100; 
$arraytemp['field3'] = 100; 
$arraytemp['subarray'][0]["field1"] = 10; 
$arraytemp['subarray'][0]["field2"] = 100; 
$arraytemp['subarray'][0]["field3"] = 100; 
$arraytemp['subarray'][1]["field1"] = 10; 
$arraytemp['subarray'][1]["field2"] = 100; 
$arraytemp['subarray'][1]["field3"] = "defORDERBYTHIS"; 

$array[] = $arraytemp; 

// Sort the multidimensional array 
usort($array, "custom_sort"); 

// Define the custom sort function used in usort 
function custom_sort($a,$b) { 
    return strcmp($a['subarray'][1]["field3"], $b['subarray'][1]["field3"]); 
} 
+0

謝謝法比奧!這完美如預期。我將其標記爲正確的答案。感謝您及時的回覆 !!! – 2013-02-14 19:43:03

相關問題