Travailler avec les tableaux PHP de la bonne manière

Dans ce tutoriel, je vais dresser une liste des fonctions courantes des tableaux PHP avec des exemples d'utilisation et les meilleures pratiques. Tout développeur PHP doit savoir comment les utiliser et comment combiner des fonctions de tableau pour rendre le code lisible et court.

En outre, une présentation avec des exemples de code donnés vous permet de la télécharger à partir des liens associés et de la montrer à vos collègues pour renforcer l’équipe..

Les bases

Commençons par les fonctions de base qui fonctionnent avec les clés et les valeurs de tableau. Array_combine () est l'un d'entre eux. Il crée un tableau en utilisant un tableau pour les clés et un autre pour ses valeurs:

$ keys = ['sky', 'grass', 'orange']; $ values ​​= ['blue', 'green', 'orange']; $ array = array_combine ($ keys, $ values); print_r ($ array); // Tableau // (// [ciel] => bleu // [herbe] => vert // [orange] => orange //) 

Vous devez savoir que la fonction array_values ​​() renvoie un tableau indexé de valeurs, array_keys () renvoie un tableau de clés d'un tableau donné et array_flip () échange des clés avec des valeurs:

print_r (array_keys ($ array)); // ['ciel', 'herbe', 'orange'] print_r (array_values ​​($ array)); // ['bleu', 'vert', 'orange'] print_r (array_flip ($ array)); // Tableau // (// [bleu] => ciel // [vert] => herbe // [orange] => orange //)

Rendez votre code plus court

La fonction list (), qui n'est pas vraiment une fonction, mais une construction de langage, est conçue pour assigner des variables de manière courte. Par exemple, voici un exemple de base d’utilisation de la liste() une fonction:

// définir un tableau $ array = ['a', 'b', 'c']; // sans liste () $ a = $ array [0]; $ b = $ array [1]; $ c = $ array [2]; // avec list () list ($ a, $ b, $ c) = $ array;

Cette construction fonctionne parfaitement avec des fonctions comme preg_slit () ou  exploser() . En outre, vous pouvez ignorer certains paramètres, si vous n'avez pas besoin de les définir:

$ string = 'hello | wild | world'; list ($ hello,, $ world) = exploser ('|', $ string); echo ("$ hello, $ world"); // Bonjour le monde

Également, liste() peut être utilisé avec pour chaque, ce qui rend cette construction encore meilleure:

$ tableaux = [[1, 2], [3, 4], [5, 6]]; foreach ($ tableaux sous forme de liste ($ a, $ b)) $ c = $ a + $ b; echo ($ c. ','); // 3, 7, 11,

Avec la fonction extract (), vous pouvez exporter un tableau associatif vers des variables. Pour chaque élément d'un tableau, une variable sera créée avec le nom d'une clé et une valeur en tant que valeur de l'élément:

$ array = ['clothes' => 't-shirt', 'size' => 'medium', 'color' => 'blue',]; extraire ($ tableau); echo ("$ clothes $ size $ colour"); // t-shirt bleu moyen

Soit conscient que extrait() n'est pas sûr si vous travaillez avec des données utilisateur (comme les résultats de requêtes), il est donc préférable d'utiliser cette fonction avec les drapeaux EXTR_IF_EXISTS et EXTR_PREFIX_ALL.

L'opposé de la fonction précédente est la fonction compact (), qui crée un tableau associatif à partir de variables:

$ clothes = 't-shirt'; $ size = 'moyen'; $ color = 'blue'; $ array = compact ('vêtements', 'taille', 'couleur'); print_r ($ array); // Tableau // (// [vêtements] => t-shirt // [taille] => moyen // [couleur] => bleu //)

Fonctions de filtrage

Il existe une fonction intéressante pour le filtrage de tableaux, nommée array_filter (). Passez le tableau en tant que premier paramètre et une fonction anonyme en tant que second paramètre. Revenir vrai dans une fonction de rappel si vous souhaitez laisser cet élément dans le tableau, et faux si vous ne le faites pas:

$ nombres = [20, -3, 50, -99, 55]; $ positif = array_filter ($ numbers, function ($ number) return $ number> 0;); print_r ($ positif); // [0 => 20, 2 => 50, 4 => 55] 

Il existe un moyen de filtrer non seulement par les valeurs. Vous pouvez utiliser ARRAY_FILTER_USE_KEY ou ARRAY_FILTER_USE_BOTH comme troisième paramètre pour passer la clé ou les deux valeur et clé à la fonction de rappel.

Aussi, vous pouvez appeler array_filter () sans rappel pour supprimer toutes les valeurs vides:

$ nombres = [-1, 0, 1]; $ not_empty = array_filter ($ numbers); print_r ($ not_empty); // [0 => -1, 2 => 1]

Vous ne pouvez obtenir que des valeurs uniques d'un tableau à l'aide de la fonction array_unique (). Notez que la fonction conservera les clés des premiers éléments uniques:

$ array = [1, 1, 1, 1, 2, 2, 2, 3, 4, 5, 5]; $ uniques = array_unique ($ array); print_r ($ uniques); // Tableau // (// [0] => 1 // [4] => 2 // [7] => 3 // [8] => 4 // [9] => 5 //) 

Avec array_column (), vous pouvez obtenir une liste des valeurs de colonne d'un tableau multidimensionnel, comme une réponse d'une base de données SQL ou une importation d'un fichier CSV. Il suffit de passer un tableau et un nom de colonne:

$ array = [['id' => 1, 'title' => 'tree'], ['id' => 2, 'title' => 'sun'], ['id' => 3, 'title '=>' nuage '],]; $ ids = array_column ($ array, 'id'); print_r ($ ids); // [1, 2, 3] 

À partir de PHP 7, array_column () devient encore plus puissant, car il est maintenant autorisé à travailler avec un tableau d'objets. Donc, travailler avec un éventail de modèles est devenu plus facile:

$ cinemas = Cinema :: find () -> all (); $ cinema_ids = array_column ($ cinemas, 'id'); // php7 pour toujours!

Marcher à travers les tableaux

En utilisant array_map (), vous pouvez appliquer un rappel à chaque élément d’un tableau. Vous pouvez passer un nom de fonction ou une fonction anonyme pour obtenir un nouveau tableau basé sur le tableau donné:

$ cities = ['Berlin', 'KYIV', 'Amsterdam', 'Riga']; $ aliases = array_map ('strtolower', $ cities); print_r ($ aliases); // ['berlin', 'kyiv,' amsterdam ',' riga '] $ numbers = [1, -2, 3, -4, 5]; $ squares = array_map (function ($ number) return $ number ** 2;, $ numbers); print_r ($ carrés); // [1, 4, 9, 16, 25]

Il existe un mythe selon lequel il n’existe aucun moyen de transmettre les valeurs et les clés d’un tableau à un rappel, mais nous pouvons le supprimer:

$ model = ['id' => 7, 'name' => 'James']; $ callback = function ($ key, $ value) return "$ key is $ value"; ; $ res = array_map ($ callback, array_keys ($ model), $ model); print_r ($ res); // Tableau // (// [0] => id est 7 // [1] => le nom est James //)

Mais cela a l'air sale. Il vaut mieux utiliser array_walk () à la place. Cette fonction a le même aspect que array_map (), mais cela fonctionne différemment. Tout d’abord, un tableau est passé par une référence, donc array_walk () ne crée pas un nouveau tableau, mais modifie un tableau donné. Ainsi, en tant que tableau source, vous pouvez transmettre la valeur du tableau par une référence dans un rappel. Les clés de tableau peuvent également être passées facilement:

$ fruits = ['banana' => 'yellow', 'apple' => 'green', 'orange' => 'orange',]; array_walk ($ fruits, fonction (& $ valeur, $ clé) $ valeur = "$ clé est $ valeur";); print_r ($ fruits); // Tableau // (// [banane] => la banane est jaune // [pomme] => pomme est verte // [orange] => orange est orange //)

Rejoindre les tableaux

Le meilleur moyen de fusionner deux ou plusieurs tableaux en PHP est d'utiliser la fonction array_merge (). Les éléments des tableaux seront fusionnés et les valeurs avec les mêmes clés de chaîne seront remplacées par la dernière valeur:

$ array1 = ['a' => 'a', 'b' => 'b', 'c' => 'c']; $ array2 = ['a' => 'A', 'b' => 'B', 'D' => 'D']; $ merge = array_merge ($ array1, $ array2); print_r ($ merge); // Tableau // (// [a] => A // [b] => B // [c] => c // [D] => D //) 

Pour supprimer les valeurs de tableau d'un autre tableau (ou tableaux), utilisez array_diff (). Pour obtenir les valeurs présentes dans des tableaux donnés, utilisez array_intersect (). Les exemples suivants montreront comment cela fonctionne:

$ array1 = [1, 2, 3, 4]; $ array2 = [3, 4, 5, 6]; $ diff = array_diff ($ array1, $ array2); print_r ($ diff); // [0 => 1, 1 => 2] $ intersect = array_intersect ($ array1, $ array2); print_r ($ intersecter); // [2 => 3, 3 => 4]

Faites le calcul avec les valeurs du tableau

Utilisez array_sum () pour obtenir une somme de valeurs de tableau, array_product () pour les multiplier ou créez votre propre formule avec array_reduce ():

$ numbers = [1, 2, 3, 4, 5]; echo (array_sum ($ numbers)); // 15 echo (tableau_produit ($ nombres)); // 120 echo (array_reduce ($ numbers, function ($ carry, $ item) return $ carry? $ Carry / $ item: 1;)); // 0,0083 = 1/2/3/4/5 

Pour compter toutes les valeurs d'un tableau, utilisez array_count_values ​​(). Il donnera toutes les valeurs uniques d'un tableau donné sous forme de clés et un nombre de ces valeurs sous forme de valeur:

$ choses = ['pomme', 'pomme', 'banane', 'arbre', 'arbre', 'arbre']; $ values ​​= array_count_values ​​($ things); print_r ($ values); // Tableau // (// [pomme] => 2 // [banane] => 1 // [arbre] => 3 //)

Génération de tableaux

Pour générer un tableau avec une taille donnée et la même valeur, utilisez array_fill ():

$ bind = array_fill (0, 5, '?'); print_r ($ bind); // ['?', '?', '?', '?', '?'] 

Pour générer un tableau avec une plage de clés et de valeurs, telles que des heures de la journée ou des lettres, utilisez range ():

$ lettres = plage ('a', 'z'); print_r ($ lettres); // ['a', 'b',…, 'z'] $ hours = range (0, 23); print_r ($ hours); // [0, 1, 2,…, 23]

Pour obtenir une partie d'un tableau, par exemple, seulement les trois premiers éléments, utilisez array_slice ():

$ numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; $ top = array_slice ($ numbers, 0, 3); print_r ($ top); // [1, 2, 3]

Tri des tableaux

Il est bon de se rappeler que chaque fonction de tri en PHP fonctionne avec des tableaux par une référence et retourne vrai en cas de succès ou faux en cas d'échec. Il existe une fonction de tri de base appelée sort (), qui trie les valeurs par ordre croissant sans conserver les clés. La fonction de tri peut être précédée des lettres suivantes:

  • une, trier les clés de conservation
  • k, trier par clés
  • r, trier en ordre inverse / décroissant
  • vous, trier avec une fonction utilisateur

Vous pouvez voir les combinaisons de ces lettres dans le tableau suivant:

une k r vous
une un tri
arsort uasort
k ksort krsort
r arsort krsort rsort
vous uasort
usort

Combiner les fonctions d'un tableau comme un patron

La vraie magie commence lorsque vous commencez à combiner des fonctions de tableau. Voici comment vous pouvez ajuster et supprimer les valeurs vides dans une seule ligne de code avec array_filter () et array_map ():

$ values ​​= ['say', 'bye', "," à "," espaces ","]; $ words = array_filter (array_map ('trim', $ values)); print_r ($ mots); // ['dire', 'au revoir', 'à', 'espaces']

Pour créer un identifiant pour une carte de titre à partir d’un tableau de modèles, nous pouvons utiliser une combinaison de array_combine () et array_column ():

$ modèles = [$ modèle1, $ modèle2, $ modèle3]; $ id_to_title = array_combine (array_column ($ models, 'id'), array_column ($ models, 'title'));

Pour obtenir les trois premières valeurs d'un tableau, nous pouvons utiliser array_count_values ​​(), arsort (), et array_slice ():

$ lettres = ["a", "a", "a", "a", "b", "b", "c", "d", "d", "d", "d", "d ']; $ values ​​= array_count_values ​​($ letters); // obtient la clé pour compter le tableau arsort ($ values); // trier par ordre décroissant en préservant la clé $ top = array_slice ($ values, 0, 3); // get top 3 print_r ($ top); // Tableau // (// [d] => 5 // [a] => 4 // [b] => 2 //)

C'est facile a utiliser array_sum () et array_map () calculer la somme de l'ordre en quelques lignes:

$ order = [['product_id' => 1, 'price' => 99, 'count' => 1], ['product_id' => 2, 'price' => 50, 'count' => 2], ['product_id' => 2, 'price' => 17, 'count' => 3],]; $ sum = array_sum (array_map (function ($ product_row) return $ product_row ['price'] * $ product_row ['count'];, $ order)); print_r ($ sum); // 250

Conclusion

Comme vous pouvez le constater, la connaissance des fonctions de la matrice principale peut rendre votre code beaucoup plus court et plus lisible. Bien sûr, PHP a beaucoup plus de fonctions de tableau, et même les fonctions données ont beaucoup de variations à utiliser avec des paramètres et des drapeaux supplémentaires, mais je pense que dans ce tutoriel, nous avons couvert les bases que tout développeur PHP devrait connaître..

Veuillez noter que j'ai créé une présentation avec les exemples donnés afin de pouvoir la télécharger à partir des liens associés et la montrer à votre équipe..

Si vous avez des questions, n'hésitez pas à les poser dans les commentaires de l'article. 

Lectures complémentaires et liens connexes

  • Manuel des tableaux sur php.net
  • Fonctions anonymes (fermetures) sur php.net
  • Téléchargez une présentation pour votre équipe