ホームページ  >  記事  >  バックエンド開発  >  「array_map」を使用して PHP 配列を共有キーとマージするにはどうすればよいですか?

「array_map」を使用して PHP 配列を共有キーとマージするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 07:21:30360ブラウズ

How to Merge PHP Arrays with Shared Keys Using  `array_map`?

同じキーでの PHP 配列のマージ: array_map を使用した解決策

PHP では、配列が共通のキーを共有している場合、配列のマージが困難になることがあります。 array_map 関数を活用したソリューションでこの問題に対処しましょう。

目的:
共有キー (例: "Camera1") に基づいて 2 つの配列 $array1 と $array2 を結合します。

解決策:
array_map は、複数の配列を同時に反復処理し、それぞれにコールバック関数を適用する方法を提供します。要素。使用方法は次のとおりです:

<code class="php">$array1 = [
    ["Camera1" => "192.168.101.71"],
    ["Camera2" => "192.168.101.72"],
    ["Camera3" => "192.168.101.74"]
];

$array2 = [
    ["Camera1" => "VT"],
    ["Camera2" => "UB"],
    ["Camera3" => "FX"]
];

$results = [];

array_map(function($a, $b) use (&$results) {
    // Get the key for both arrays
    $key = current(array_keys($a));
    $a[$key] = ['ip' => $a[$key]];
    $key = current(array_keys($b));
    $b[$key] = ['name' => $b[$key]];
    
    $results += array_merge_recursive($a, $b);
}, $array1, $array2);</code>

仕組み:

  • コールバック関数は、$array1 と $array2 の各要素を反復処理します。
  • 各要素について、キー (例: "Camera1") を取得し、それに応じて値を変更し、新しいキー ('ip' と 'name') を追加して配列構造の一貫性を確保します。
  • 変更された要素は、array_merge_recursive を使用してマージされ、$results に保存されます。
  • 結果の配列は、各共有キーの両方の要素の値を結合し、変更された構造を保持します。

出力:

var_dump($results);

次の出力が生成されます:

<code class="php">array (size=3)
  'Camera1' => 
    array (size=2)
      'ip' => string '192.168.101.71' (length=14)
      'name' => string 'VT' (length=2)
  'Camera2' => 
    array (size=2)
      'ip' => string '192.168.101.72' (length=14)
      'name' => string 'UB' (length=2)
  'Camera3' => 
    array (size=2)
      'ip' => string '192.168.101.74' (length=14)
      'name' => string 'FX' (length=2)</code>

このソリューションは、共有キーを保持し、目的の配列構造を確保しながら、2 つの配列を効果的にマージします。

以上が「array_map」を使用して PHP 配列を共有キーとマージするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。