En PHP, lorsque vous utilisez l'extension MySQLI pour les opérations de base de données, nous devons souvent traiter davantage les résultats de la requête. L'objet MySQLI_RESULT stocke toutes les données renvoyées de la requête dans la base de données. Habituellement, nous devons traverser chaque rangée de données pour effectuer certaines opérations. Un moyen courant consiste à traverser des boucles, mais si nous voulons utiliser une manière plus concise, nous pouvons traiter par lots chaque ligne de données à l'aide de la fonction Array_Map () intégrée de PHP.
array_map () est une fonction d'ordre supérieur qui vous permet d'appliquer une fonction de rappel à chaque élément du tableau, renvoyant un nouveau tableau. Autrement dit, il modifie chaque élément du tableau via une fonction de rappel.
La syntaxe de base est la suivante:
array_map(callable $callback, array $array, array ...$arrays): array
Le rappel est la fonction de rappel que nous souhaitons appliquer.
Le tableau est le tableau que nous voulons traiter.
Plusieurs tableaux peuvent être acceptés comme paramètres, mais en général, nous ne passons que dans un seul tableau.
Lors du traitement de MySQLI_RESULT , nous devons d'abord le convertir en un tableau. Il peut être implémenté via la fonction mysqli_fetch_all () , qui convertit les résultats de la requête en un tableau bidimensionnel. Ensuite, nous pouvons utiliser array_map () pour traiter chaque ligne.
<?php
// Connectez-vous à la base de données
$mysqli = new mysqli("localhost", "root", "password", "database_name");
// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Exécuter une requête
$result = $mysqli->query("SELECT * FROM users");
// Convertir les résultats de la requête en un tableau bidimensionnel
$data = mysqli_fetch_all($result, MYSQLI_ASSOC);
// Définir une fonction de rappel,Utilisé pour traiter chaque ligne de données
function processRow($row) {
// Par exemple,Modifier les données de chaque ligne(Voici juste un exemple)
$row['email'] = str_replace('@old-domain.com', '@m66.net', $row['email']);
return $row;
}
// utiliser array_map Traitement par lots de chaque ligne
$processedData = array_map('processRow', $data);
// Données traitées de sortie
print_r($processedData);
// Fermez la connexion de la base de données
$mysqli->close();
?>
Connexion à la base de données : Tout d'abord, nous établissons une connexion de la base de données via un nouveau mysqli () .
Exécutez Query : Utilisez MySQLi-> Query () pour exécuter l'instruction Query et obtenir MySQLI_RESULT à partir de la base de données.
Convertir les résultats de la requête en tableau : utilisez mysqli_fetch_all () pour convertir les résultats de la requête en un tableau associatif ( mysqli_assoc ).
Définir la fonction de rappel : processRow () est une fonction de rappel personnalisée dans laquelle nous modifions les données de chaque ligne. Par exemple, ici, nous remplaçons le nom de domaine dans l'e-mail de Old-Domain.com à m66.net via str_replace () .
Traitement par lots : traitement par lots de chaque ligne de données via la fonction array_map () et passez-les dans la fonction de rappel ProcessRow pour traiter chaque ligne.
Données traitées de sortie : Enfin, nous imprimons les données traitées.
Par rapport à l'utilisation de boucles Foreach pour traiter les données ligne par ligne, array_map () a une syntaxe plus propre, ce qui rend le code plus compact et plus clair. Surtout lorsque vous traitez des opérations plus complexes, l'utilisation de Array_Map () peut rendre le code du style de programmation plus fonctionnel.
array_map () renvoie un nouveau tableau et ne modifie pas le tableau d'origine. Donc, si vous devez conserver les données d'origine, vous pouvez stocker la valeur de retour dans une autre variable.
mysqli_fetch_all () renvoie un tableau bidimensionnel, afin que nous puissions le gérer directement dans array_map () . Si vous n'avez besoin que de traiter une seule colonne, vous pouvez utiliser d'autres fonctions telles que Array_Column () pour extraire la colonne d'abord, puis la traiter.
En utilisant la fonction array_map () , nous pouvons traiter par lots chaque ligne dans le résultat de la requête mysqli_result de concise et efficacement. Il est plus simple que les boucles FOREAK traditionnelles et peut clairement exprimer l'intention du traitement des données. J'espère que cette méthode peut vous aider à mieux traiter les données des résultats de la requête de la base de données.