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

Comment rechercher efficacement des sous-tableaux basés sur des paires clé-valeur dans des tableaux PHP multidimensionnels ?

Susan Sarandon
Libérer: 2024-12-15 20:39:18
original
305 Les gens l'ont consulté

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

Recherche de sous-tableaux basés sur des paires clé-valeur dans des tableaux PHP multidimensionnels

Lors de la traversée de tableaux multidimensionnels, il peut être difficile de localiser des sous-tableaux spécifiques basés sur sur une paire clé-valeur. Cependant, il existe un moyen efficace de le faire de manière récursive, quelle que soit la profondeur du tableau.

Implémentation de la fonction :

Créons une fonction pour rechercher des sous-tableaux répondant aux conditions spécifiées :

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

    if (is_array($array)) {
        // Check if the current subarray matches
        if (isset($array[$key]) && $array[$key] == $value) {
            $results[] = $array;
        }

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

    return $results;
}
Copier après la connexion

Utilisation 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

Nous pouvons rechercher des sous-tableaux avec la clé 'name' et la valeur 'cat 1' :

$found = search($arr, 'name', 'cat 1');
print_r($found);
Copier après la connexion

Sortie :

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

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

)
Copier après la connexion

Considérations relatives à l'efficacité :

Pour une efficacité améliorée, en particulier lorsque traitant de grands tableaux, la fonction peut être optimisée en évitant la fusion de tableaux. Au lieu de cela, elle peut stocker les résultats des appels récursifs dans un tableau temporaire :

function search_optimized($array, $key, $value)
{
    $results = [];
    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

En passant le tableau de résultats par référence, la fonction peut construire efficacement le résultat final.

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!

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