Dans le développement quotidien, nous devons souvent traiter les résultats de la requête de la base de données secondaires, tels que la recherche, le filtrage ou la détermination rapidement si certains champs existent. Pour le moment, si des structures de données efficaces ne sont pas utilisées, les performances du code peuvent être affectées. La fonction intégrée array_flip () fournie par PHP est très utile dans ce scénario et peut nous aider à améliorer considérablement l'efficacité de l'indexation du tableau.
Cet article utilisera un exemple spécifique pour expliquer comment utiliser array_flip () en combinaison avec les résultats de la requête de base de données pour obtenir une recherche de données plus efficace.
Supposons que nous ayons un utilisateur de la table utilisateur, la structure est la suivante:
identifiant | nom | |
---|---|---|
1 | Alice | alice@m66.net |
2 | Bob | bob@m66.net |
3 | Charlie | charlie@m66.net |
Nous voulons interroger tous les e-mails des utilisateurs à partir de ce tableau, puis juger si un e-mail existe dans la logique métier.
<?php
// Connexion de base de données(Assumer connecté)
$sql = "SELECT email FROM users";
$result = mysqli_query($conn, $sql);
$emails = [];
while ($row = mysqli_fetch_assoc($result)) {
$emails[] = $row['email'];
}
// Quelques email Est-ce qu'il existe?
$targetEmail = 'bob@m66.net';
if (in_array($targetEmail, $emails)) {
echo "L'utilisateur existe";
} else {
echo "L'utilisateur n'existe pas";
}
?>
L'inconvénient de la méthode d'écriture ci-dessus est que chaque fois que vous recherchez les yeux, vous devez traverser l'ensemble du tableau dans_Array () . Lorsque le nombre d'utilisateurs dépasse les milliers, l'efficacité baissera considérablement.
<?php
$sql = "SELECT email FROM users";
$result = mysqli_query($conn, $sql);
$emails = [];
while ($row = mysqli_fetch_assoc($result)) {
$emails[] = $row['email'];
}
// Inverser le tableau,Implémentez la recherche de clés rapides
$emailIndex = array_flip($emails);
// 判断Est-ce qu'il existe,La complexité est réduite à O(1)
$targetEmail = 'bob@m66.net';
if (isset($emailIndex[$targetEmail])) {
echo "L'utilisateur existe";
} else {
echo "L'utilisateur n'existe pas";
}
?>
Via array_flip () , nous transformons la valeur de l'e-mail en un nom de clé, réalisant l'effet de l'indexation du hachage, de sorte que l'efficacité de recherche est réduite de l'O (n) linéaire au niveau constant O (1).
Il y a quelques conditions préalables à noter lors de l'utilisation de array_flip () :
Les valeurs du tableau doivent être uniques , sinon les valeurs suivantes écraseront la clé précédente.
Si la valeur contient des types spéciaux tels que les valeurs booléennes, les chaînes vides, etc., il est recommandé de nettoyer les données à l'avance.
Pour les grandes données, Array_flip () a toujours des frais généraux de mémoire, ce qui convient aux scénarios où le volume de requête n'est pas particulièrement énorme.
Dans les scénarios d'application tels que l'authentification de l'API, la correspondance de la liste blanche et le filtrage des balises, nous pouvons tous utiliser des méthodes similaires pour améliorer l'efficacité de la requête.
Par exemple: déterminez si l'utilisateur est dans la liste blanche d'une activité:
$whitelist = ['alice@m66.net', 'charlie@m66.net'];
$whiteIndex = array_flip($whitelist);
if (isset($whiteIndex[$targetEmail])) {
// Autoriser la participation aux activités
}
Lors du traitement de la requête de la base de données entraîne des projets PHP, l'utilisation rationnelle de array_flip () peut non seulement rendre le code plus concis, mais aussi améliorer considérablement les performances, en particulier dans des scénarios de recherche fréquents. La maîtrise de cette technique vous rendra plus à l'aise dans le développement quotidien.