Dans le développement quotidien de PHP, les opérations de recherche de tableau sont des scénarios très courants, tels que déterminer s'il existe une valeur dans un tableau ou nécessitant une recherche fréquente de certains éléments dans de grands tableaux. Bien que In_Array () soit une fonction très intuitive et facile à utiliser, les performances peuvent devenir un problème lorsque vous êtes confronté à un grand tableau ou à un scénario de recherche fréquent.
Cet article présentera comment réaliser des méthodes de recherche de tableaux plus efficaces en combinant array_flip () et in_array () .
in_Array () est une fonction utilisée en PHP pour déterminer si une valeur existe dans un tableau. Sa syntaxe est la suivante:
in_array($needle, $haystack, $strict = false)
La couche sous-jacente de cette fonction est la recherche linéaire, ce qui signifie qu'elle comparera les éléments dans le tableau un par un. Pour les petits tableaux, ce n'est pas un problème. Mais s'il y a des milliers ou même plus d'éléments de tableau et que les opérations de recherche sont très fréquentes, ses performances deviendront un goulot d'étranglement.
Exemple de code:
$values = range(1, 100000);
if (in_array(99999, $values)) {
echo "Trouvé!";
}
Lorsque le code ci-dessus est exécuté, chaque recherche traversera l'ensemble du tableau, et au pire, elle traversera les 100 000 éléments.
La fonction de array_flip () est d'échanger des clés et des valeurs du tableau. Sa complexité temporelle est O (n), mais la complexité de la recherche de valeurs peut devenir O (1).
Exemple:
$values = range(1, 100000);
$flipped = array_flip($values);
if (isset($flipped[99999])) {
echo "Trouvé!";
}
Dans le code ci-dessus, array_flip () convertit la valeur en une clé, tandis que dans PHP, la recherche de clé de la table de hachage est très rapide, presque constant. Par conséquent, bien que l'initialisation Array_flip () ait des frais généraux, l'amélioration des performances qu'il apporte est énorme dans des scénarios de recherche fréquents.
Simulons un scénario plus pratique, par exemple, vous devez vérifier que les ID soumis par un lot d'utilisateurs sont dans la liste blanche d'identité autorisée du système:
$allowed_ids = [101, 205, 309, 402, 588, 999]; // Liste blanche
$submitted_ids = [205, 402, 777]; // Utilisateur soumis ID
// Méthode 1:Voie traditionnelle,utiliser in_array
foreach ($submitted_ids as $id) {
if (!in_array($id, $allowed_ids)) {
echo "ID {$id} 不在Liste blanche中,Rejet de fonctionnement。" . PHP_EOL;
}
}
// Méthode 2:Méthode d'optimisation,utiliser array_flip
$allowed_map = array_flip($allowed_ids);
foreach ($submitted_ids as $id) {
if (!isset($allowed_map[$id])) {
echo "ID {$id} 不在Liste blanche中,Rejet de fonctionnement。" . PHP_EOL;
}
}
Lorsque le nombre de listes blanches autorisées devient grande, la méthode deux sera considérablement plus rapide que la méthode un.
array_flip () nécessite que la valeur du tableau est unique, sinon les valeurs en double seront écrasées, entraînant une perte de données.
Si la valeur est un tableau ou un objet, etc. qui ne peut pas être utilisé comme type de clé, array_flip () rapportera une erreur ou sera automatiquement converti en chaîne, donc être utilisé avec prudence.
Uniquement en utilisant array_flip () lorsque les recherches de valeur sont fréquentes et que les tableaux sont importants que vous pouvez refléter les avantages; Si vous ne le regardez qu'une seule fois, il gaspillera les performances.
En combinant array_flip () et in_array () , nous pouvons améliorer considérablement les performances dans les scénarios où des recherches de tableau fréquentes sont nécessaires. Son idée principale est de convertir la «recherche de valeur» en «recherche de clés» et de tirer parti de la fonction d'accès rapide des tables de hachage de tableau PHP.
La maîtrise de cette technique peut être très utile lors du traitement de grandes quantités de données ou de l'optimisation des performances du système.