2013-02-14 125 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