ホームページ > バックエンド開発 > PHPチュートリアル > 入れ子になった連想配列の相違点を効率的に比較するにはどうすればよいですか?

入れ子になった連想配列の相違点を効率的に比較するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-09 01:04:02
オリジナル
1046 人が閲覧しました

How to Efficiently Compare Nested Associative Arrays for Differences?

入れ子になった連想配列の違いを比較する

プログラミングのコンテキストで多次元の連想配列を扱う場合、多くの場合、次のことが必要になります。内容を比較し、相違点を特定します。 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート