入れ子になった連想配列の違いを比較する
プログラミングのコンテキストで多次元の連想配列を扱う場合、多くの場合、次のことが必要になります。内容を比較し、相違点を特定します。 2 つの配列があるシナリオを考えてみましょう:
$pageids = [ ['id' => 1, 'linklabel' => 'Home', 'url' => 'home'], ['id' => 2, 'linklabel' => 'Graphic Design', 'url' => 'graphicdesign'], ['id' => 3, 'linklabel' => 'Other Design', 'url' => 'otherdesign'], ['id' => 6, 'linklabel' => 'Logo Design', 'url' => 'logodesign'], ['id' => 15, 'linklabel' => 'Content Writing', 'url' => 'contentwriting'], ]; $parentpage = [ ['id' => 2, 'linklabel' => 'Graphic Design', 'url' => 'graphicdesign'], ['id' => 3, 'linklabel' => 'Other Design', 'url' => 'otherdesign'], ];
目標は、$parentpage に存在しない $pageids 内の行を見つけることです。配列にネストされた連想配列が含まれている場合、array_diff_assoc() を単独で使用すると、望ましい結果が得られない可能性があります。この問題に対処するには、array_map() と unserialize() を利用できます。
$pageWithNoChildren = array_map('unserialize', array_diff(array_map('serialize', $pageids), array_map('serialize', $parentpage)));
まず、array_map() は $pageids と $parentpage の両方のサブ配列を反復処理し、各サブ配列をシリアル化します。 Serialize() を使用した文字列表現。これにより、多次元配列が文字列を要素とする 1 次元配列に効果的に変換されます。
次に、array_diff() は部分配列の文字列表現を比較し、相違点のみを含む配列を返します。次に、結果の配列が array_map() に戻され、各文字列が反復処理され、unserialize() を使用して元のサブ配列表現にアンシリアル化されます。
その結果、$pageWithNoChildren には次の配列が含まれます。 $parentpage に存在しない $pageid 内の行を表すサブ配列。このアプローチは、ネストされた連想配列の内容を効果的に比較し、必要な差異を提供します。
以上が入れ子になった連想配列の相違点を効率的に比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。