如何通过一个子阵列值对数组子阵列进行排序? (PHP)

时间:2013-04-16 17:49:21

标签: php arrays sorting

我有一个这样的数组:

array(
    'sortBy' => array(0 => 3,   1 => 2,   2 => 1),
    'other'  => array(0 => 'x', 1 => 'y', 2 => 'z'),
    'xxx'    => array(0 => 3,   1 => 2,   2 => 1),
    ...
)

如何按 sortBy 中的值对子阵列其他的内容进行排序?在一个数组中有无限量的其他子数组,但这些子数组中的键总是相同的(例如在 sortBy 其他 xxx 键0的值必须全部排序在一起)

排序数组看起来像这样:

array(
    'sortBy' => array(0 => 1,   1 => 2,   2 => 3),
    'other'  => array(0 => 'z', 1 => 'y', 2 => 'x'),
    'xxx'    => array(0 => 1,   1 => 2,   3 => 3)
)

1 个答案:

答案 0 :(得分:2)

您可以使用array_multisort()效果良好。

$array = array(
    'sortBy' => array(3,   2,   1),
    'other'  => array('x', 'y', 'z'),
    'xxx'    => array(3,   2,   1),
);

array_multisort($array['sortBy'], SORT_NUMERIC, $array['other'], $array['xxx']);

var_export($array);

以上示例打印以下内容:

array (
  'sortBy' => 
  array (
    0 => 1,
    1 => 2,
    2 => 3,
  ),
  'other' => 
  array (
    0 => 'z',
    1 => 'y',
    2 => 'x',
  ),
  'xxx' => 
  array (
    0 => 1,
    1 => 2,
    2 => 3,
  ),
)

修改

由于你确定数组的键可以是任何东西(除了一个明确的键:sortBy),然后array_multisort()仍可以使用,尽管使用更动态的参数列表调用。

$array = array( … );

$args = array(&$array['sortBy'], SORT_NUMERIC);
foreach ($array as $key => $value) {
    if ($key !== 'sortBy') {
        $args[] = &$array[$key];
    }
}
call_user_func_array('array_multisort', $args);
unset($args);

var_export($array);