【问题标题】:Sorting multi-dimensional array using array_multisort, where you don't know the dimensions of the array使用array_multisort对多维数组进行排序,这里不知道数组的维度
【发布时间】:2009-05-25 18:42:33
【问题描述】:

我有一个多维数组,它基本上由每年的一个子数组组成。因此,例如,如果我有三年的数据,它可能看起来像这样:

$data[0] = Array(0,1,2,3,4,5,6,7);
$data[1] = Array(6,5,4,3,6,7,8,9);
$data[2] = Array(1,4,2,5,7,3,1,4);

现在我希望能够根据某一年对这些数组进行排序。例如,我可能想根据第二年进行排序,在这种情况下,它们都将根据 $data[1] 的重新排序进行排序。

我可以使用 array_multisort 轻松做到这一点:

array_multisort($data[1],SORT_ASC,$data[0],$data[2]);

那很好,但我不知道会有多少年的数据。我想要某种方式来指定正确数量的参数,但我不知道如何在 php 中做到这一点,除非我只需要为每个可能的年数设置一个 if 语句,这似乎非常痛苦:

if ($num_years == 1)
{
    array_multisort($data[$which_year],SORT_ASC);
}
else if ($num_years == 2)
{
    array_multisort($data[$which_year],SORT_ASC,$data[0],$data[1]); // this does work, interestingly, in spite of the repetition...
}

有人知道更好的方法吗?

【问题讨论】:

    标签: php sorting multidimensional-array


    【解决方案1】:

    您始终可以使用call_user_func_array,将array_multisort 指定为第一个参数并构建要传递给array_multisort 的参数数组。比如:

    $params = array();
    foreach($data as $year){
      $params[] = $year;
    }
    call_user_func_array('array_multisort', $params);
    

    【讨论】:

    • 啊!凉爽的。这听起来正是我需要的。我试试看。
    • 有效!一件事:您需要通过引用将数组添加到 $params 数组中,否则它不起作用。所以:$params[] = &$year;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2012-06-10
    相关资源
    最近更新 更多