0

別の配列に従って配列をソートするのに問題があります。usort、uksort、および uasort を試しましたが、どこにも行きません。私の配列構造が異なるため、スタックオーバーフローに関する他の質問はここでは直接適用できません。この多次元配列を並べ替えたい:

$main = Array (
    [Technology] => Array ()
    [World] => Array ()
    [Europe] => Array () 
)

このインデックス配列を使用することにより:

$index = Array (
    [0] => Europe
    [1] => Technology
    [2] => World
)

基本的に、この例では、ヨーロッパを $main 配列で 1 位、テクノロジーを 2 位、世界を 3 位にしたいと考えています。これが $index 配列での位置付けだからです。それ、どうやったら出来るの?(上記の配列の小さな構文エラーは無視してください)

4

3 に答える 3

1
$main_sort = array()    
foreach ($index as $key => $value) {
    if ($main [$value]) $main_sorted [$value] = $main [$value];
}

配列をループして、$index配列の値を使用してそれらの値を新しい配列にマップする$mainだけです。

于 2012-05-22T12:49:20.400 に答える
0

このソリューションは、$main のキーではない $index に値がない場合に機能します (例の場合のように)。

$sorted = array_merge(array_flip($index), $main);

$index の値が $main のキーのスーパーセットである場合、可能な解決策は次のとおりです。

$sorted = array_intersect_assoc(array_merge(array_flip($index), $main), $main);

PHP 関数を配列で動作させることは、「明示的に」行うよりもはるかに高速であることに注意してください。

于 2012-05-22T13:19:37.833 に答える
0

与えられ$index$main

uksort($main, function ($k, $k2) use ($index) {
  return array_search($k, $index) - array_search($k2, $index);
});

配列は で指定されたキーに従ってソートされます$index。一致しないキーの動作は規定されていません。

于 2012-05-22T13:01:33.907 に答える