Maison >développement back-end >tutoriel php >Comment rechercher efficacement des paires clé-valeur dans des tableaux PHP multidimensionnels ?

Comment rechercher efficacement des paires clé-valeur dans des tableaux PHP multidimensionnels ?

DDD
DDDoriginal
2024-12-20 21:26:19915parcourir

How to Efficiently Search for Key-Value Pairs in Multidimensional PHP Arrays?

Recherche de paires clé-valeur dans des tableaux PHP multidimensionnels

Les tableaux multidimensionnels en PHP peuvent être difficiles à naviguer, en particulier lors de la recherche d'une clé spécifique -paires de valeurs. Ce guide complet présente une méthode efficace pour récupérer rapidement tous les sous-tableaux contenant une paire clé-valeur spécifiée, quelle que soit la profondeur d'imbrication du tableau.

La solution proposée est une fonction récursive nommée search, qui prend un tableau, une clé , et une valeur comme paramètres. Il vérifie si la paire clé-valeur existe au niveau actuel du tableau et, si tel est le cas, ajoute le sous-tableau actuel aux résultats. Par la suite, elle parcourt chaque sous-tableau, s'appelant de manière récursive pour étendre la recherche à des niveaux plus profonds.

function search($array, $key, $value)
{
    $results = array();

    if (is_array($array)) {
        if (isset($array[$key]) && $array[$key] == $value) {
            $results[] = $array;
        }

        foreach ($array as $subarray) {
            $results = array_merge($results, search($subarray, $key, $value));
        }
    }

    return $results;
}

En employant la récursion, la fonction de recherche explore la structure entière du tableau, garantissant que toutes les paires clé-valeur correspondantes sont identifié.

Par exemple, étant donné l'exemple de tableau suivant :

$arr = array(0 => array(id=>1,name=>"cat 1"),
             1 => array(id=>2,name=>"cat 2"),
             2 => array(id=>3,name=>"cat 1"));

Et en recherchant key=name et value="cat 1", la fonction retournera :

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => cat 1
        )

    [1] => Array
        (
            [id] => 3
            [name] => cat 1
        )

)

Pour améliorer l'efficacité, une implémentation alternative fusionne les résultats des appels récursifs dans un seul tableau $results au lieu de créer des tableaux séparés :

function search($array, $key, $value)
{
    $results = array();
    search_r($array, $key, $value, $results);
    return $results;
}

function search_r($array, $key, $value, &$results)
{
    if (!is_array($array)) {
        return;
    }

    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }

    foreach ($array as $subarray) {
        search_r($subarray, $key, $value, $results);
    }
}

Notez que l'esperluette & dans la liste des paramètres indique un passage par référence, garantissant que tous les appels récursifs modifient les mêmes $results array.

Cette solution robuste et polyvalente permet aux développeurs de rechercher de manière transparente des paires clé-valeur dans des tableaux PHP multidimensionnels, quelle que soit leur profondeur ou leur complexité.

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