Une introduction approfondie aux tableaux PHP • WPShout

By | juin 18, 2019

Formation WordPress

Le but de cet article est de vous permettre de bien comprendre les tableaux PHP. Nous allons couvrir ce qu’ils sont et mettre en évidence quelques éléments moins connus que même les développeurs expérimentés en PHP n’ont peut-être pas connus ou réalisés.

Le retour aux sources est un excellent moyen de s’assurer que vous ne manquez pas quelque chose de vraiment important. Ceci est particulièrement utile pour un sujet aussi important que les tableaux en PHP. Vous pouvez aller très loin dans le développement WordPress sans comprendre parfaitement les tableaux PHP, mais vous n’obtiendrez presque rien si vous ne connaissez pas les bases. À la lumière de cela, notre objectif sera de commencer basique afin que les débutants puissent suivre, en nous assurant de couvrir en profondeur tous les aspects des tableaux en PHP.

Qu'est-ce qu'un tableau PHP?

Au niveau le plus élémentaire, un tableau PHP est une liste. Si vous avez déjà programmé, vous avez peut-être rencontré un nom similaire (mot fantaisie: «construct») dans la plupart des autres langages de programmation. En JavaScript et dans de nombreux autres langages, un tableau est une simple liste de valeurs. Une telle liste n'aura qu'une couche de signification; et parfois, en PHP, les tableaux ne sont que des listes d'éléments divers. Donc, vous pourriez avoir un tableau d'entiers: [1, 2, 3, 4, 5] ou de type mixte [true, 1, 'red', 5, $object, 'marshmallow']. Ces ensembles ressemblant à des listes sont des tableaux PHP valides.

Fred m'a dit qu'il aimait voir les tableaux comme une liste de courses. Exprimé en PHP, ma liste de l'autre jour ressemblerait à ceci:

$ to_buy = [
    'bananas',
    'onion',
    'chocolate'
];

Comme vous pouvez le deviner, un tableau contenant une liste d'éléments peut être très utile pour la programmation. Supposons que vous souhaitiez parcourir votre liste d’achats en recherchant chaque article dans le magasin. C’est l’utilisation idéale pour cette forme la plus élémentaire de tableaux PHP. Nous couvrirons *Comment* faire cela ailleurs, mais la structure de données PHP d'un tableau est la parfaite à utiliser pour cela.

Les tableaux associatifs sont des combinaisons ordonnées de paires

Ce qui différencie les tableaux PHP de ceux d’autres langues est qu’ils ne sont pas exclusivement un type de données semblable à une liste, comme nous l’avons expliqué plus haut. En PHP, il existe également des tableaux légèrement plus structurés (ou «à deux dimensions»). C’est là que nous conservons des ensembles de paires «clé-valeur». Celles-ci sont appelées «tableaux associatifs» en PHP, car elles nous permettent «d’associer» quelque chose aux valeurs principales de notre tableau. Cela nous permet d’encoder des informations assez significatives, comme:

[
    'name' => 'David Hayes',
    'age' => 33,
    'race' => 'white',
    'hair' => 'bald'
]

Cette information sur votre auteur n’est pas l’exemple le plus intéressant, ni le plus utile. Mais cela montre clairement ce que cette “deuxième dimension” du tableau nous donne: plus de contexte pour les valeurs qu’il contient. Le tableau «valeurs» uniquement ['David Hayes', 33, 'white', 'bald'] pourrait être compréhensible. Mais peut-être que 33 est sa taille de chaussure, ou sa longueur de fémur. C'est pourquoi nous préférons souvent utiliser des tableaux associatifs plutôt que des tableaux «unidimensionnels» plus simples pour le développement PHP et WordPress.

Même les tableaux non indexés ont des index

Une autre chose qui n’est pas tout à fait claire, mais qui est vraie, c’est que même si vous faites un tableau qui n’est qu’une liste de choses, en interne, PHP en fait toujours un ensemble paire-clé-valeur. Alors ['bananas', 'onion', 'chocolate'] est en fait un tableau identique à celui déclaré:

[
    0 => 'bananas',
    1 => 'onion',
    2 => 'chocolate'
] 

Certes, cette deuxième version est plus prolixe et déroutante, mais c’est ce qui se passe réellement. Cela met en évidence une autre chose importante: les «index» ou «clés» en PHP (et dans la plupart des autres langages de programmation) commencent à 0 plutôt qu'à 1. ne pas simplement pour confondre les débutants, mais cela a cet effet. Mais “l'indexation zéro” est la raison pour laquelle la banane est l'élément “zéro-ith” du tableau, et non le “premier”. Même si vous avez programmé pendant des années, cela vous surprendra et vous troublera de temps en temps.

Obtenir un petit nerd: les tableaux sont des cartes ordonnées

Comme tous les tableaux PHP sont en fait associatifs, ils sont très puissants. Si vous avez déjà programmé dans d’autres langues, vous risquez d’être confus. La plupart des autres langages n'appellent pas cette structure de «paires clé-valeur», des «tableaux». En Python, ils sont appelés «dictionnaires», en Java, des «tables de hachage», en JavaScript, vous créez des «objets» pour ce genre de choses. comportement.

Cette capacité à nommer arbitrairement des clés est l’un des meilleurs et des pires aspects des tableaux PHP. Cela en fait principalement le type de données le plus utilisé dans le langage, en particulier pour les développeurs WordPress. La documentation de PHP contient un langage vrai mais déroutant pour les débutants concernant les tableaux. Ça dit:

Un tableau en PHP est en réalité une carte ordonnée. Une carte est un type qui associe des valeurs à des clés. Ce type est optimisé pour plusieurs utilisations différentes; il peut être traité comme un tableau, une liste (vecteur), une table de hachage (une implémentation d'une carte), un dictionnaire, une collection, une pile, une file d'attente et probablement plus. Comme les valeurs de tableau peuvent être d'autres tableaux, des arbres et des tableaux multidimensionnels sont également possibles.

Maintenant que vous avez lu ma section précédente, j’espère que vous comprendrez un peu ce que dit PHP.net. Essentiellement, les tableaux PHP peuvent être (et sont) utilisés pour un grand nombre d'utilisations de données plus ésotériques que de simples listes. En effet, ils peuvent devenir des «dictionnaires» à corrélation clé-valeur. Tout cet ensemble de comportements variés de tableaux en PHP a toujours eu un faible coût en performances, mais surtout en PHP 7, le coût a considérablement diminué.

Toutes les façons de déclarer des tableaux

Les plus avisés d’entre vous ont sans doute remarqué que jusqu’à présent, je me suis exclusivement référé aux tableaux PHP avec ce que l’on appelle parfois une syntaxe de tableau «abrégé» – des crochets: []. Avant PHP 5.4, vous deviez déclarer un tableau en utilisant le array () fonction (techniquement, une construction de langage, mais la différence dépasse de loin la portée de cet article). Donc, vous déclareriez une liste avec les valeurs 1, 2 et 3, comme ceci:

tableau (1, 2, 3)

Fonctionnellement, cette syntaxe et celle du crochet [1, 2, 3] sont identiques… tant que vous utilisez un serveur utilisant PHP 5.4 ou une version ultérieure. Si ce tutoriel n’était pas destiné à un site axé sur WordPress, cela n’aurait aucune importance. Mais il n’en reste pas moins que beaucoup de code WordPress n’a pas survécu à son histoire, de PHP jusqu’à la version 5.2. Dans WordPress 5.2, le projet a cessé officiellement de supporter PHP 5.2. (Un de ces précieux aide-mémoire.) Donc, c’est maintenant, heureusement, quelque chose que vous devez savoir et comprendre pour lire du code plus ancien.

Ajout de valeurs aux tableaux déclarés

L’autre qualité intéressante de la syntaxe de tableau plus courte est qu’elle correspond à bien d’autres façons de travailler avec des tableaux PHP depuis un certain temps. Disons que vous voulez ajouter une valeur (ou une paire clé-valeur à un tableau), ma façon préférée de le faire a toujours été:

// l'ajouter avec la prochaine touche numérique:
$ num_array[] = 91;
// l'ajouter avec une clé spécifique:
$ tableau['new_key'] = 'new_value';

Pour le premier formulaire, vous pouvez également utiliser array_push ($ num_array, 91). La seconde n'a jamais eu une manière différente de l'accomplir. Les crochets sont donc liés aux tableaux en PHP depuis un certain temps.

Vous ajouterez souvent des valeurs aux tableaux déjà déclarés en PHP, pour des raisons de logique du code que vous écrivez. Les tableaux sont une sorte de détenteurs de données universels en PHP, vous faites donc ce genre de choses avec eux beaucoup.

La facilité de déclaration, de lecture et de manipulation des tableaux est la principale raison pour laquelle vous verrez si souvent $ args tableaux dans WordPress PHP. Et, contrairement aux objets ou fonctions, il est possible d’ignorer la déclaration d’arguments ou de propriétés, si le code reçu est construit correctement. (Les composants internes de WordPress sont.) Je n’entrerai pas dans les détails, car Fred a déjà écrit un excellent article sur le thème $ args tableaux:

Modèles de codage WordPress: Définition des options de fonction avec $ args

Lecture des valeurs à partir de tableaux PHP

Si vous avez déjà un tableau PHP existant et que vous voulez connaître la valeur d'une clé spécifique, vous le ferez généralement avec:

$ val = $ numeric_indexed_array[3];
$ var = $ word_keyed['lookup'];

Rien de tout cela ne vous surprendra si vous commencez à vous sentir à l'aise avec la syntaxe entre crochets. La chose clé à voir est que la “clé” se trouve entre crochets, et cette clé peut être un nombre ou une chaîne.

Un autre cas assez commun d'accès aux données dans les tableaux est l'endroit où vous voulez que le premier élément dans un tableau qui ne peut pas être indexé à zéro. (C’est-à-dire que la première paire du tableau peut être quelque chose comme 27 => 'éléphant'.) Si vous avez un tableau qui n’a pas de clés fiables, le moyen d’obtenir ses premiers éléments est le tableau_shift Fonction PHP.

De même, si vous voulez le dernier élément mais ne connaissez pas l’index de cet élément, vous pouvez utiliser array_pop. (Si vous connaissez la programmation et avez entendu parler d’une «pile», c’est ici que vous entendez souvent parler de push – mentionné dans la dernière section – et de pop en tant qu’opposés.)

Les tableaux $ _GET et $ _POST importants et magiques

Cela peut aller sans dire, mais $ _GET est pour les éléments de chaîne de requête, $ _POST est pour les valeurs HTTP POSTed à une page.

L’endroit le plus courant où un développeur PHP doit lire les valeurs des tableaux est probablement le $ _GET et $ _POST superglobales. Cet article présente des détails exhaustifs qui dépassent le cadre de cet article, mais expliquent comment accéder aux valeurs de chaîne de requête que quelqu'un a ajoutées à une URL. http://example.com/?id=102932, ou accéder aux valeurs “validées” via un de. ($ _GET est pour les éléments de chaîne de requête à la fin d'une URL, $ _POST est pour les valeurs HTTP POSTed sur une page le plus souvent quand quelqu'un remplit un formulaire web.)

Ces deux types de tableaux sont de simples tableaux de PHP, et des personnes autres que vous (cela peut arriver assez souvent sur un site WordPress) peuvent les avoir modifiées avant l’exécution de votre code, ou vous devrez peut-être les modifier pour modifier le fonctionnement des autres codes. Pour le meilleur ou pour le pire, PHP les traite simplement comme des tableaux que tout le monde peut éditer comme presque n'importe quel autre tableau. Donc, vous les lisez comme les tableaux ci-dessus, donc $ postid = $ _GET['id']. C’est aussi ce que les gens leur écrivent, mais cela dans une introduction et je n’encourage pas les débutants à le faire.

Enfin, il y a aussi un $ _REQUEST superglobal, qui a essentiellement combiné les $ _GET et $ _POST (et le $ _COOKIES superglobal que j’ai rarement eu personnellement à utiliser) dans un seul tableau. Encore une fois, je vous découragerais de l’utiliser car il est moins clair sur ce qui se passe et donc un peu moins sécurisé. Mais vous pouvez voir du code qui y accède, et il est bon de savoir de quoi il s’agit.

Boucler à travers des tableaux

Il est très courant lors du traitement de listes (ou de tableaux associatifs) que vous souhaitiez les parcourir et les modifier avec chaque élément. Qu'il s'agisse de les transformer, de les additionner ou d'afficher chaque élément. L’affichage de chaque élément d’un tableau correspond en réalité à la «boucle» infâme de WordPress. C’est une boucle qui parcourt une multitude de WP_Post objets. Pour ceux qui ne savent absolument pas ce que sont les objets PHP, la version courte est qu’ils sont des conteneurs de données et de fonctionnalités plus complexes et structurés que les tableaux. Plus est expliqué ici.

“The Loop” se fait principalement à l'aide d'un tandis que boucle. (Et, pour éviter de le rendre confus, compte techniquement sur certaines fonctions et sur un objet.) Les tableaux les plus couramment utilisés sont itérés dans PHP. pour chaque. Cela ressemble à ceci:

foreach ($ array as $ key => $ value) 
    echo "La clé est $ clé.";
    echo "La valeur est $ valeur.";

Ce qui est génial pour chaque est-ce que vous pouvez le lire assez facilement comme l'anglais. J’avais lu ce qui précède comme «pour chaque élément du tableau $ array, utilisez les clés comme variable $ key et les valeurs comme variable $ valeur. Utilisez une paire pour chaque itération du code suivant (contenu entre accolades). ”

Vous pouvez itérer en utilisant un pour boucle aussi, mais pour chaque est tellement plus courant en PHP parce qu’il fait à peu près exactement ce que vous attendez, et qu’il est beaucoup plus simple à écrire. Et une remarque: si vous n’avez pas besoin des clés de tableau, cela fonctionne de la même manière: foreach ($ tableau comme $ valeur).

Aller au-delà de la boucle

Les boucles sont excellentes et très courantes pour de nombreux types d’itérations à travers des tableaux que vous voudrez peut-être faire. Comme les boucles fonctionnent dans de nombreuses langues, elles restent le moyen préféré par la plupart des gens pour transformer un ensemble d’éléments en un ensemble différent. Mais il existe un meilleur moyen: PHP a des fonctions conçues pour vous permettre de transformer tous les éléments d’un tableau sans utiliser pour chaque.

L'utilisation de ces fonctions peut vous donner un code plus propre et rendre tout plus clair. Mais ils ont un peu de complexité conceptuelle qui est plus grande pour la plupart des débutants. Que ces concepts de «programmation fonctionnelle» vous conviennent ou non est une question de choix personnel. Mais vous devriez certainement envisager de les apprendre si la majeure partie du reste de cet article vous a paru être une critique.

Voici la meilleure introduction que j’ai écrite pour expliquer pourquoi et comment array_map et array_filter:

Introduction douce à PHP fonctionnel pour les développeurs WordPress: Utilisation du filtre et de la carte dans des tableaux de messages

Pourquoi des tableaux au lieu d'objets?

Une des questions les plus courantes qui se pose est la différence entre les tableaux et les objets en PHP. Les deux sont des unités conceptuelles pouvant contenir beaucoup de données connexes. Alors quelle est la différence?

Comme je le vois, les tableaux sont parfaits pour créer rapidement des ensembles de données non structurés ou semi-structurés. C’est pourquoi, comme nous l’avons mentionné plus tôt, $ args les tableaux sont très courants dans WordPress.

Mais Parfois, soit vous voulez une structure définie de manière plus rigide, soit vous voulez avoir plus de «comportement» ou de fonctions liées à cette structure de données. C’est où et quand vous devriez atteindre un objet PHP. Les propriétés des objets étant plus rigides qu'un tableau aléatoire, vous pouvez accéder de manière plus fiable aux propriétés des objets qu'aux index des tableaux. Je serais donc beaucoup plus confiant que PHP ne crierait pas contre moi si j’ai un tableau de publications WordPress lorsque j’accède aux objets de publication en tant que $ post-> titre que d'accéder aux tableaux de poste en tant que $ post['title']. (Certes, ce n’est pas un bon exemple car je fais confiance à WordPress dans les deux cas.: P)

Esoterica: Array-Accès aux objets

Une autre chose moins commune sur les objets et les tableaux PHP que vous verrez parfois est la suivante: dans des contextes, il est possible de lire un objet PHP sous forme de tableau. Donc, si un objet a une propriété $ obj-> longueur = 7, parfois vous verrez le code appeler avec succès $ obj['length'] et obtenez 7. Comment?

Il y a deux façons. Le moins commun est qu'il existe une interface PHP, ArrayAccess et si une classe met en oeuvre Dans ce cas, les données de cet objet sont accessibles sous forme de tableau. Personnellement, je n’utiliserais pas cela et ne le mettrais pas en œuvre (en dehors des cas de compatibilité), mais j’ai déjà été dérouté alors je voulais le mentionner.

Une autre chose que je ne recommanderais pas, mais que je rencontre assez souvent: les objets PHP peuvent être forcés dans des tableaux. Comment?

$ array = (array) $ object;

J’ai vu un débutant ou deux copier ce type de code car ils ne comprenaient pas très bien les concepts sous-jacents et avaient trouvé cette astuce quelque part. Voici ce que PHP.net dit à ce sujet:

Si un objet est converti en tableau, le résultat est un tableau dont les éléments sont les propriétés de l’objet. Les clés sont les noms des variables membres, à quelques exceptions près: les propriétés d'entier sont inaccessibles; Dans les variables privées, le nom de la classe est ajouté au nom de la variable; Les variables protégées ont un '*' ajouté au nom de la variable. Ces valeurs ajoutées au début ont des octets nuls de chaque côté.

Il est peu probable que ce qui précède ait de l’importance pour vous la plupart du temps, alors ne vous découragez pas si vous ne le comprenez pas bien. La chose essentielle à savoir est que vous pouvez accéder aux propriétés publiques d’un objet en tant que tableau, soit en implémentant le ArrayAccess interface, ou par quelqu'un qui le jette dans un tableau. Ce n’est pas courant, mais cela arrive.

Lecture connexe sur les tableaux pour WordPress

Il y a quelques autres lectures ici à WPShout qui se construisent à partir des concepts de cet article que je voulais souligner. Les voici:

Up Periscope: utilisations pratiques de print_r () dans le développement WordPress

Utilisation d'objets WP_Query sans boucle

Ce que nous avons appris sur les tableaux PHP

J'espère que vous savez maintenant qu'il existe effectivement deux types de tableaux PHP: les paires clé-valeur et les listes simples. Les deux s'appellent des tableaux en PHP, ce qui explique pourquoi un tableau est l’un des types les plus courants rencontrés en PHP, en particulier WordPress PHP. Il existe également diverses méthodes pour lire, ajouter des données et manipuler des tableaux. J'espère qu'au moins une partie de cela vous sera utile si vous continuez à travailler sur WordPress!

Crédit image: Wikimedia