我有一个这样的数组:
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)
)
答案 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);