Maison  >  Article  >  développement back-end  >  Implémentation de calcul paresseux de l'intersection et de l'union de tableaux en PHP

Implémentation de calcul paresseux de l'intersection et de l'union de tableaux en PHP

WBOY
WBOYoriginal
2024-05-01 08:54:021040parcourir

PHP Calcul paresseux des intersections et des unions de tableaux En PHP, vous pouvez utiliser des générateurs pour implémenter des calculs paresseux d'intersections et d'unions de tableaux afin de retarder le calcul des résultats jusqu'à ce que cela soit nécessaire : Intersection : utilisez le générateur array_intersect_lazy(), uniquement si les éléments du tableau sont égal Ensuite seulement, itère et génère des sorties. Union : à l'aide du générateur array_union_lazy(), parcourez deux tableaux et affichez-les dans le résultat, en filtrant les éléments en double.

Implémentation de calcul paresseux de lintersection et de lunion de tableaux en PHP

Implémentation paresseuse du calcul de l'intersection et de l'union de tableaux en PHP

En PHP, le traitement de l'intersection et de l'union de tableaux est une opération courante. Habituellement, nous utiliserons la fonction array_intersect()array_merge() pour mettre en œuvre ces opérations. Cependant, cela entraîne le calcul immédiat du résultat, ce qui peut parfois entraîner des problèmes de performances, notamment avec les grandes baies.

Le calcul paresseux peut résoudre ce problème, il nous permet de retarder le calcul jusqu'à ce que le résultat soit réellement nécessaire. À l’aide de générateurs, nous pouvons facilement implémenter des intersections et des unions de tableaux calculées paresseusement.

Mise en œuvre

Intersection

function array_intersect_lazy($array1, $array2) {
    foreach ($array1 as $key => $value) {
        if (isset($array2[$key]) && $value === $array2[$key]) {
            yield $value;
        }
    }
}

Union

function array_union_lazy($array1, $array2) {
    foreach ($array1 as $key => $value) {
        yield $value;
    }

    foreach ($array2 as $key => $value) {
        if (!isset($array1[$key])) {
            yield $value;
        }
    }
}

Cas pratique

$array1 = ['foo', 'bar', 'baz'];
$array2 = ['bar', 'qux', 'quux'];

foreach (array_intersect_lazy($array1, $array2) as $value) {
    echo "$value\n";
}

// 输出:
// bar

foreach (array_union_lazy($array1, $array2) as $value) {
    echo "$value\n";
}

// 输出:
// foo
// bar
// baz
// qux
// quux

Ces générateurs nous permettent de parcourir et d'imprimer l'intersection ou l'union directement sans attendre la fin du calcul du résultat . Cela peut améliorer considérablement les performances des grandes baies.

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!

Déclaration:
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