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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-19 08:29:11829parcourir

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

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

La recherche de paires clé-valeur spécifiques dans un tableau multidimensionnel peut être fastidieuse. Si la profondeur du tableau est variable, trouver une solution rapide et efficace est essentiel.

Fonction de recherche récursive

La fonction PHP suivante utilise la récursivité pour parcourir le tableau de manière récursive, en comparant valeurs pour une clé donnée :

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;
}

Exemple Utilisation

Considérez 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')
);

Pour trouver tous les sous-tableaux avec la clé « nom » et la valeur « chat 1 », nous utiliser :

print_r(search($arr, 'name', 'cat 1'));

Sortie :

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

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

)

Considérations d'efficacité

Pour une efficacité améliorée, en particulier pour les grands tableaux , envisagez d'utiliser une fonction récursive qui transmet les résultats par référence. En partageant un seul tableau $results temporaire, les performances peuvent être considérablement améliorées :

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);
    }
}

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