通过子元素排序数组的最有效方法?

时间:2010-09-11 14:34:12

标签: arrays multidimensional-array

我有一个多维数组。

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

我想知道通过它的子数组的特定属性对父数组进行排序的最有效方法是什么。例如,我想将它们按$ sub_array [1]的升序排列,因此父数组将被排序为2,1,0。

2 个答案:

答案 0 :(得分:2)

使用http://www.php.net/manual/en/function.usort.php并编写一个实现所需排序条件的回调函数。

答案 1 :(得分: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
        )

)
*/

请注意,如果$ subarray [1]相等,我的函数会将两个子数组相等,所以如果你想更具体一些,可以为$a[1] == $b[1]添加更多规则。