0

我有一个这样的数组:

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中的值对其他子数组的内容进行排序?一个数组中有无限数量的其他子数组,但是这些子数组中的键总是相同的(例如在sortByotherxxx中,键 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)
)
4

1 回答 1

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);
于 2013-04-16T17:57:34.540 回答