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

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

DDD
DDDoriginal
2024-12-24 14:25:10525parcourir

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

Rechercher des valeurs dans des tableaux multidimensionnels à l'aide de clés en PHP

La recherche de paires clé-valeur spécifiques dans des tableaux multidimensionnels peut être une tâche fastidieuse, surtout si vous ne savez pas la profondeur du tableau. Cet article présente une fonction PHP efficace qui parcourt le tableau de manière récursive, renvoyant tous les sous-tableaux qui correspondent aux critères de recherche.

La fonction, search(), prend trois paramètres : le tableau à rechercher, la clé à rechercher. , et la valeur correspondante. Il utilise la récursion pour explorer tous les niveaux du tableau, en vérifiant la paire clé-valeur à chaque niveau.

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

Par exemple, étant donné le tableau :

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

Appel de la recherche ( $arr, 'name', 'cat 1') renverrait :

array(0 => array('id' => 1, 'name' => 'cat 1'),
      1 => array('id' => 3, 'name' => 'cat 1'));

Pour plus d'efficacité, une version optimisée de la fonction, search_r(), peut être utilisé :

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

Cette version évite la fusion répétitive de tableaux, ce qui la rend plus efficace.

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