Comment comparer efficacement les tableaux associatifs imbriqués pour les différences ?

Linda Hamilton
Libérer: 2024-11-09 01:04:02
original
1003 Les gens l'ont consulté

How to Efficiently Compare Nested Associative Arrays for Differences?

Comparaison des tableaux associatifs imbriqués pour les différences

Dans le contexte de la programmation, lorsqu'il s'agit de tableaux associatifs multidimensionnels, il devient souvent nécessaire de comparer leur contenu et identifier les différences. Considérons le scénario où vous avez deux tableaux :

$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'],
];
Copier après la connexion

L'objectif est de trouver les lignes dans $pageids qui ne sont pas présentes dans $parentpage. L'utilisation de array_diff_assoc() seule peut ne pas donner le résultat souhaité si les tableaux contiennent des tableaux associatifs imbriqués. Pour résoudre ce problème, nous pouvons exploiter array_map() et unserialize().

$pageWithNoChildren = array_map('unserialize',
    array_diff(array_map('serialize', $pageids), array_map('serialize', $parentpage)));
Copier après la connexion

Tout d'abord, array_map() parcourt les sous-tableaux dans $pageids et $parentpage et sérialise chaque sous-tableau dans une représentation sous forme de chaîne utilisant Serialize(). Cela convertit efficacement les tableaux multidimensionnels en tableaux unidimensionnels avec des chaînes comme éléments.

Ensuite, array_diff() compare les représentations sous forme de chaîne des sous-tableaux et renvoie un tableau contenant uniquement les différences. Le tableau résultant est ensuite renvoyé à array_map(), qui parcourt chaque chaîne et la désérialise dans sa représentation de sous-tableau d'origine à l'aide d'unserialize().

En conséquence, $pageWithNoChildren contiendra un tableau de sous-tableaux qui représentent les lignes de $pageids qui ne sont pas présentes dans $parentpage. Cette approche compare efficacement le contenu des tableaux associatifs imbriqués et fournit les différences souhaitées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal