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の値でのサブ配列の内容をソートするにはどうすればよいですか? その 1 つの配列内には無制限の量の他のサブ配列がありますが、これらのサブ配列内のキーは常に同じです (たとえば、 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,
  ),
)

編集

配列のキーは (1 つの明確な key: 以外の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 に答える