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
Libérer: 2024-12-20 21:26:19
original
1023 Les gens l'ont consulté

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;
}
Copier après la connexion

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"));
Copier après la connexion

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
        )

)
Copier après la connexion

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);
    }
}
Copier après la connexion

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal