Comment filtrer les lignes qui se chevauchent dans des tableaux 2D à l'aide de la fonction `array_diff_assoc()` de PHP ?

Linda Hamilton
Libérer: 2024-10-25 11:17:30
original
112 Les gens l'ont consulté

How to Filter Overlapping Rows in 2D Arrays Using PHP's `array_diff_assoc()` Function?

Filtrage des lignes d'un tableau 2D basé sur des lignes qui se chevauchent

En PHP, la fonction array_diff_assoc() est couramment utilisée pour déterminer la différence entre deux tableaux. Cependant, dans certains scénarios impliquant des tableaux 2D, les utilisateurs peuvent rencontrer des résultats inattendus lorsqu'ils tentent de filtrer les lignes qui se chevauchent.

Un utilisateur a signalé avoir utilisé array_diff_assoc() pour comparer deux tableaux 2D, mais a remarqué que le résultat contenait des lignes communes aux deux. tableaux au lieu de seulement les lignes uniques. Pour comprendre le problème, examinons les exemples de données fournis par l'utilisateur :

$array1 = [
    [12 => 'new q sets'],
    [11 => 'common set']
];

$array2 => [
    [11 => 'common set']
];
Copier après la connexion

Après avoir appelé array_diff_assoc($array1, $array2), l'utilisateur s'attendait à recevoir une sortie contenant uniquement la ligne unique de $array1. (c'est-à-dire '[12 => 'nouveaux ensembles q']'). Cependant, le résultat réel était :

[
    [11 => 'common set']
]
Copier après la connexion

Le problème réside dans la façon dont PHP compare les valeurs dans array_diff_assoc(). Deux valeurs sont considérées comme égales uniquement si elles sont strictement égales en tant que chaînes. Dans le cas des tableaux 2D fournis, la valeur associée à la clé '11' dans les deux tableaux est la chaîne 'common set'. Cependant, les paires clé-valeur elles-mêmes ne sont pas identiques aux tableaux.

En conséquence, lorsque array_diff_assoc() compare les deux tableaux, il constate que la paire clé-valeur [11 => 'common set'] est commun aux deux tableaux et l'exclut de la différence. Ce comportement provient du fait que tous les tableaux en PHP sont représentés en interne par la chaîne "Array".

Pour résoudre ce problème, on peut utiliser une approche différente pour filtrer les lignes qui se chevauchent entre les tableaux 2D. Une méthode courante consiste à créer un identifiant unique pour chaque ligne et à utiliser cet identifiant comme clé pour un tableau associatif. Voici un exemple :

$uniqueIdentifiers = [];
$filteredRows = [];

foreach ($array1 as $row) {
    $uniqueIdentifier = implode('|', array_values($row));
    $uniqueIdentifiers[$uniqueIdentifier] = true;
}

foreach ($array2 as $row) {
    $uniqueIdentifier = implode('|', array_values($row));
    if (isset($uniqueIdentifiers[$uniqueIdentifier])) {
        unset($uniqueIdentifiers[$uniqueIdentifier]);
    }
}

foreach ($uniqueIdentifiers as $uniqueIdentifier => $isPresent) {
    $filteredRows[] = array_values(array_flip(explode('|', $uniqueIdentifier)));
}
Copier après la connexion

Cette approche crée un identifiant unique pour chaque ligne en concaténant les valeurs du tableau et en l'utilisant comme clé. Il parcourt ensuite le deuxième tableau et supprime tous les identifiants uniques correspondants de la liste. Enfin, il parcourt les identifiants uniques restants, retourne les clés et les valeurs pour reconstruire les lignes et les ajoute au tableau $filteredRows.

En utilisant cette méthode, vous pouvez filtrer efficacement les lignes qui se chevauchent entre les tableaux 2D. tout en garantissant que les lignes uniques sont correctement identifiées et renvoyées dans le résultat.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!