Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann man verschachtelte assoziative Arrays effizient auf Unterschiede vergleichen?

Wie kann man verschachtelte assoziative Arrays effizient auf Unterschiede vergleichen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-09 01:04:021022Durchsuche

How to Efficiently Compare Nested Associative Arrays for Differences?

Vergleichen verschachtelter assoziativer Arrays auf Unterschiede

Im Kontext der Programmierung wird es beim Umgang mit mehrdimensionalen assoziativen Arrays oft notwendig, dies zu tun Vergleichen Sie ihre Inhalte und identifizieren Sie Unterschiede. Stellen Sie sich das Szenario vor, in dem Sie zwei Arrays haben:

$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'],
];

Das Ziel besteht darin, die Zeilen in $pageids zu finden, die in $parentpage nicht vorhanden sind. Die alleinige Verwendung von array_diff_assoc() führt möglicherweise nicht zum gewünschten Ergebnis, wenn die Arrays verschachtelte assoziative Arrays enthalten. Um dieses Problem zu beheben, können wir array_map() und unserialize() nutzen.

$pageWithNoChildren = array_map('unserialize',
    array_diff(array_map('serialize', $pageids), array_map('serialize', $parentpage)));

Zuerst iteriert array_map() über die Unterarrays in $pageids und $parentpage und serialisiert jedes Unterarray in eine String-Darstellung mit serialize(). Dadurch werden die mehrdimensionalen Arrays effektiv in eindimensionale Arrays mit Zeichenfolgen als Elementen umgewandelt.

Als nächstes vergleicht array_diff() die Zeichenfolgendarstellungen der Unterarrays und gibt ein Array zurück, das nur die Unterschiede enthält. Das resultierende Array wird dann an array_map() zurückgegeben, das jeden String durchläuft und ihn mit unserialize() wieder in seine ursprüngliche Sub-Array-Darstellung desialisiert.

Als Ergebnis enthält $pageWithNoChildren ein Array von Unterarrays, die die Zeilen in $pageids darstellen, die in $parentpage nicht vorhanden sind. Dieser Ansatz vergleicht effektiv die Inhalte der verschachtelten assoziativen Arrays und liefert die gewünschten Unterschiede.

Das obige ist der detaillierte Inhalt vonWie kann man verschachtelte assoziative Arrays effizient auf Unterschiede vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn