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; }
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"));
Nous pouvons rechercher des sous-tableaux avec la clé 'name' et la valeur 'cat 1' :
$found = search($arr, 'name', 'cat 1'); print_r($found);
Sortie :
Array ( [0] => Array ( [id] => 1 [name] => cat 1 ) [1] => Array ( [id] => 3 [name] => cat 1 ) )
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); } }
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!