2010-09-11 47 views
1

我有一个多维数组。最有效的方式来按子元素排列数组?

$array[0] = array(1, 8, 2);  
$array[1] = array(5, 6, 15); 
$array[2] = array(-8, 2, 1025); 

我想知道什么是最有效的方式,通过它的特定属性订购父阵列的子排列。例如,我想把它们按$ sub_array [1]的升序排列,所以父数组将被排序为2,1,0。

+0

我没有得到你要求的东西。ELaborate。 – 2010-09-11 14:41:15

+0

很难说出口。我想通过嵌套数组中的值来排序数组。 – 2010-09-11 14:46:04

+0

另请参阅http://stackoverflow.com/questions/3701855/how-do-i-sort-a-php-array-by-an-element-nested-inside – ErichBSchulz 2014-01-07 10:12:02

回答

2

sort和它的表兄弟有变化,你可以提供自己的排序回调函数:usortuasort(即保持索引),以及uksort(其排序上的按键,您需要创建自己的排序回调做你想在这里做什么。

function sort_by_subarray($a, $b) 
{ 
    // $a and $b are elements of $array that are being compared against 
    // each other to be sorted 

    if (!isset($a[1]) || !isset($b[1])) 
    { 
    // Do something if $a[1] or $b[1] is undefined 
    // Your question doesn't define what the behaviour here should be 
    } 
    else 
    { 
    if ($a[1] == $b[1]) return 0;  // the elements are the same 
    return ($a[1] < $b[1]) ? -1 : 1; // otherwise, sort from lowest to highest 
    } 
} 

$array = array(
    array(1, 8, 2), 
    array(5, 6, 15), 
    array(-8, 2, 1025) 
); 
uasort($array, "sort_by_subarray"); 

/* Results in: 
Array 
(
    [2] => Array 
     (
      [0] => -8 
      [1] => 2 
      [2] => 1025 
     ) 

    [1] => Array 
     (
      [0] => 5 
      [1] => 6 
      [2] => 15 
     ) 

    [0] => Array 
     (
      [0] => 1 
      [1] => 8 
      [2] => 2 
     ) 

) 
*/ 

注意,我的功能将作为平等的两个子阵列进行排序,如果$子数组[1]是平等的,所以如果你想更具体的,你可以添加时更多的规则$a[1] == $b[1]

+0

几乎在那里,但我需要的东西,将排序一个具体的值与子阵列 - 所以如果数组[1] - > sub_array [2]>数组[2] - > sub_array [2]然后数组[1]胜过数组[2] – 2010-09-11 15:19:06

+0

@Mild Fuzz:这就是我的排序功能应该在做(见结果)。除非我误解了某些东西? – 2010-09-11 15:27:23

+0

有更好的理解自定义回调函数的好资源吗? – 2010-09-13 22:03:40

相关问题