PHP では、array_flip() 関数を使用して 1 次元配列のキー値を交換できます。多次元配列の場合は、複数の方法から選択できます。再帰戦略は入れ子になった多次元配列の処理に適していますが、再帰により関数スタックのオーバーフローが発生する可能性があります。反復戦略はこの問題を回避しますが、ネストされた配列が多くなると効率が低くなります。配列のサイズと構造に応じて、最高のパフォーマンスを得るために再帰的または反復的な戦略を選択します。
#PHP 配列のキーと値の交換: 多次元配列のキーと値の交換の戦略とパフォーマンスの比較
PHP では、場合によっては、配列のキーと値を交換する必要があります。 1 次元配列の場合、これはarray_flip() 関数を使用するのと同じくらい簡単です。ただし、多次元配列の場合、状況は複雑になります。
戦略とパフォーマンスの比較
多次元配列のキー値を交換するために使用できるさまざまな戦略があり、それぞれの戦略には利点と利点があります。デメリット。最も一般的に使用される 2 つの戦略を次に示します。1. 再帰を使用する
function flipArrayRecursive(array $array) { if (!is_array($array)) { return $array; } $flippedArray = []; foreach ($array as $key => $value) { $flippedArray[$value] = flipArrayRecursive($key); } return $flippedArray; }
利点:ネストされた多次元配列を扱う場合、再帰を使用します。この戦略は非常に効果的です。
欠点: 再帰により、特に非常に大きな配列を扱う場合、関数スタックのオーバーフローが発生する可能性があります。
2. 反復を使用する
function flipArrayIterative(array $array) { $flippedArray = []; $queue = new SplQueue(); $queue->enqueue([$array, null]); while (!$queue->isEmpty()) { list($currentArray, $parentKey) = $queue->dequeue(); foreach ($currentArray as $key => $value) { if (is_array($value)) { $queue->enqueue([$value, $key]); } else { $flippedArray[$value] = $parentKey === null ? $key : "$parentKey.$key"; } } } return $flippedArray; }
利点:反復戦略により、関数スタックのオーバーフローの問題が回避され、大規模な配列の作業でもうまく機能します。
欠点: ネストされた多次元配列を扱う場合、配列の深さが増すにつれて反復戦略が遅くなる可能性があります。
実際的なケース
シナリオを考えてみましょう。キーと値のペアを含む 2 次元配列を、値キー ペアを含む 2 次元配列に変換する必要があります。元の配列:
$array = [ 'key1' => 'value1', 'key2' => 'value2', 'key3' => ['key3-1' => 'value3-1', 'key3-2' => 'value3-2'] ];
再帰的戦略を使用して、交換された配列を取得します:
$flippedArray = flipArrayRecursive($array);
出力:
Array ( [value1] => key1 [value2] => key2 [value3-1] => key3.key3-1 [value3-2] => key3.key3-2 )
反復戦略を使用して、スワップされた配列を取得します:
$flippedArray = flipArrayIterative($array);
出力:
Array ( [value1] => key1 [value2] => key2 [value3-1] => key3.key3-1 [value3-2] => key3.key3-2 )
Which選択する戦略は?
最適な戦略の選択は、配列のサイズと構造によって異なります。配列が小さい場合、または配列のネストが少ない場合は、再帰的戦略の方が効率的である可能性があります。より大きな配列またはよりネストされた配列の場合は、反復戦略がより適切です。以上がPHP 配列のキーと値の交換: 多次元配列のキーと値の交換の戦略とパフォーマンスの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。