|
Table des matières
Les tableauxUn tableau PHP est en fait une association ordonnée (littéralement, une “map”). Une association est un type qui fait correspondre des valeurs à des clés. Ce type est optimisé de diverses façons, qui font que vous pouvez le manipuler comme un tableau à indices réels, une liste (vecteur) ou une table de hachage (qui est une implémentation d’association), dictionnaire, collection, pile, queue et encore d’autres. Comme une valeur peut elle-même être un tableau, vous pouvez simuler facilement un arbre. Les détails d’implémentation de ces structures sont hors du champ de ce manuel, mais vous trouverez ici un exemple de toutes ces structures. SyntaxeCréer un tableau [[function.array.html|array()**Un tableau array peut être créé avec la fonction array(). Cette fonction prend en argument des structures ““key” ⇒ “value““, séparées par des virgules.
<?php $arr = array("foo" => "bar", 12 => true); echo $arr["foo"]; // bar echo $arr[12]; // 1 ?> Une clé “key” est soit un entier soit une chaîne de caractères. Si une clé est la représentation standard d’un entier positif, elle sera interprétée comme tel. (i.e. “‘8’” sera interprété comme “8”, tandis que “‘08’” sera interprété comme “‘08’“.) Les nombres à virgule flottante dans “key” seront transtypés en entier. Il n’y a aucune différence entre les tableaux indexés et les tableaux associatifs en PHP ; il n’y a qu’un type array, qui peut contenir soit des entiers, soit des chaînes en guise d’index. Une valeur de tableau peut être de n’importe quel type.
<?php $arr = array("untableau" => array(6 => 5, 13 => 9, "a" => 42)); echo $arr["untableau"][6]; // 5 echo $arr["untableau"][13]; // 9 echo $arr["untableau"]["a"]; // 42 ?> Si vous omettez une clé lors de la spécification d’un tableau, l’indice maximum + 1 sera utilisé comme clé par défaut. Si aucun indice numérique n’a été généré, ce sera 0. Si vous en spécifiez une qui a déjà été assignée, la nouvelle valeur écrasera la précédente.
<?php // Ce tableau est identique à array(5 => 43, 32, 56, "b" => 12); // Celui ci array(5 => 43, 6 => 32, 7 => 56, "b" => 12); ?>
Utiliser “TRUE” comme clé revient à utiliser le type entier de valeur “1”. Utiliser “FALSE” comme clé revient à utiliser le type entier de valeur “0”. Utiliser “NULL” comme clé revient à utiliser le type chaîne de caractères de valeur ““““. Utiliser la chaîne vide comme index va créer cet index, et ce n’est pas la même chose que d’utiliser des crochets vides. Il n’est pas possible d’utiliser des tableaux ou des objets comme clés. Ce faisant, vous généreriez une alerte : “Illegal offset type”. La syntaxe à crochetsVous pouvez aussi modifier un tableau existant en lui assignant simplement des valeurs. L’assignation de valeurs de tableau se fait en spécifiant la clé entre crochets. Si vous omettez la clé (”“$tableau[]”“), la valeur sera ajoutée à la fin du tableau.
Si “$arr” n’existe pas, il sera créé. Cela en fait une alternative pour créer un tableau. Pour modifier une valeur, assignez-lui une nouvelle valeur. Pour supprimer une valeur, utilisez la fonction unset().
<?php $arr = array(5 => 1, 12 => 2); $arr[] = 56; // Ceci revient à $arr[13] = 56; // à ce moment du script $arr["x"] = 42; // Ceci ajoute un nouvel élément // avec l'index "x" unset($arr[5]); // Ceci efface un élément du tableau unset($arr); // Ceci efface tout le tableau ?>
<?php // Crée un simple tableau $array = array(1, 2, 3, 4, 5); print_r($array); // On efface tous les éléments, mais on conserve le tableau foreach ($array as $i => $value) { unset($array[$i]); } print_r($array); // On ajoute une valeur : notez que la nouvelle clé est 5 // et non pas 0, comme on l'attendrait. $array[] = 6; print_r($array); // Re-indexation : $array = array_values($array); $array[] = 7; print_r($array); ?>
::Array ( [0] ⇒ 1 [1] ⇒ 2 [2] ⇒ 3 [3] ⇒ 4 [4] ⇒ 5 ) Array ( ) Array ( [5] ⇒ 6 ) Array ( [0] ⇒ 6 [1] ⇒ 7 ) :: Fonctions pratiquesIl y a toute une panoplie de fonctions pratiques pour travailler avec les tableaux.
<?php $a = array(1 => 'un', 2 => 'deux', 3 => 'trois'); unset($a[2]); /* Cela va produire un tableau qui aurait été $a = array(1 => 'un', 3 => 'trois'); et non pas $a = array(1 => 'un', 2 =>'trois'); */ $b = array_values($a); // Maintenant b est le tableau array(1 => 'un', 2 =>'trois') ?> L’élément de langage foreach est spécifiquement dédié aux tableaux : il permet de passer en revue simplement les valeurs d’un tableau. À faire et à ne pas faire avec les tableauxPourquoi est-ce que "$foo[bar]" est invalide ?Vous devez toujours utiliser les guillemets autour de la chaîne de caractères placée en tant qu’index du tableau. Par exemple, utilisez “$foo[’bar’]” et non pas “$foo[bar]”. Mais, pourquoi “$foo[bar]” est faux ? Vous pourriez avoir vu la syntaxe suivante en vos vieux scripts :
<?php $foo[bar] = 'ennemi'; echo $foo[bar]; // etc. ?> C’est mauvais, mais ça marche. Pourquoi est-ce mauvais ? La raison est que PHP attend une constante entre crochets (bar) plutôt qu’une chaîne (’bar’, notez les guillemets). Or, PHP pourrait définir dans le futur des constantes qui, malheureusement pour votre code, auront ce nom. En fait, cela fonctionne car la constante indéfinie est transformée en chaîne ayant la même valeur.
<?php error_reporting(E_ALL); ini_set('display_errors', true); ini_set('html_errors', false); // Tableau simple : $array = array(1, 2); $count = count($array); for ($i = 0; $i < $count; $i++) { echo "\nChecking $i : \n"; echo "Mauvais : " . $array['$i'] . "\n"; echo "Bon : " . $array[$i] . "\n"; echo "Mauvais : {$array['$i']}\n"; echo "Bon : {$array[$i]}\n"; } ?>
Checking 0: Notice: Undefined index: $i in /Users/iboom/Desktop/CVS/docs/mysql/mysql.fr/- on line 10 Mauvais : Bon : 1 Notice: Undefined index: $i in /Users/iboom/Desktop/CVS/docs/mysql/mysql.fr/- on line 12 Mauvais : Bon : 1 Checking 1: Notice: Undefined index: $i in /Users/iboom/Desktop/CVS/docs/mysql/mysql.fr/- on line 10 Mauvais : Bon : 2 Notice: Undefined index: $i in /Users/iboom/Desktop/CVS/docs/mysql/mysql.fr/- on line 12 Mauvais : Bon : 2 | | D’autres exemples :
<?php // Affichons toutes les erreurs error_reporting(E_ALL); $arr = array('fruit' => 'pomme', 'legume' => 'carotte'); // Correct print $arr['fruit']; // pomme print $arr['legume']; // carotte // Incorrect. Cela fonctionne mais PHP affiche une alerte car // il y a utilisation d'une constante indéfinie appelée fruit // // Notice: Use of undefined constant fruit - assumed 'fruit' in... print $arr[fruit]; // pomme // Définissons une constante pour illustrer le problème. // Nous créons une constante appelée fruit, qui vaut 'legume'. define('fruit','legume'); // Notez la différence print $arr['fruit']; // pomme print $arr[fruit]; // carotte // La suite est correcte si cela se passe dans une chaîne. // Les constantes ne sont pas remplacées par leur valeur dans une chaîne print "Bonjour $arr[fruit]"; // Bonjour pomme // À une exception près, les accolades entourant un tableau dans une chaîne // permettent d'utiliser les constantes print "Bonjour {$arr[fruit]}"; // Bonjour carotte print "Bonjour {$arr['fruit']}"; // Bonjour pomme // Ceci ne fonctionnera pas et donnera une erreur d'analyse // Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING' // Cela s'applique aussi aux autoglobales dans les chaînes print "Bonjour $arr['fruit']"; print "Bonjour $_GET['foo']"; // La concaténation est une alternative print "Bonjour " . $arr['fruit']; // Bonjour pomme ?>
<?php echo $arr[somefunc($bar)]; ?> Ceci est un exemple d’utilisation de retour de fonction comme index de tableau. PHP reconnaît aussi les constantes, comme la famille des “E_*”.
<?php $error_descriptions[E_ERROR] = 'Une erreur fatale est survenue'; $error_descriptions[E_WARNING] = 'PHP émet une alerte'; $error_descriptions[E_NOTICE] = 'Ceci est juste une alerte informelle'; ?> Notez que “E_ERROR” est aussi un identifiant valide, tout comme “bar” dans le premier exemple. Mais le dernier exemple est identique à ceci :
<?php $error_descriptions[1] = 'Une erreur fatale est survenue'; $error_descriptions[2] = 'PHP émet une alerte'; $error_descriptions[8] = 'Ceci est juste une alerte informationnelle'; ?> car “E_ERROR” vaut “1”, etc. Comme nous l’avons déjà expliqué dans les exemples ci-dessus, “$foo[bar]” fonctionne mais est dangereux. Cela fonctionne car “bar” est identifié comme une constante. Mais si la constante n’existe pas, PHP suppose que vous souhaitez utiliser “bar” littéralement, sous la forme ““bar”“, mais que vous avez oublié les guillemets. Pourquoi est-ce aussi dangereux ?À l’avenir, le groupe PHP peut décider d’ajouter une constante ou un autre mot clé, ou bien vous souhaiterez aussi ajouter une constante dans votre application et vous serez bloqué. Par exemple, vous ne pouvez pas utiliser des mots comme “empty” et “default” de cette manière, car ils sont déjà réservés. Conversion en tableauPour les types scalaires (entier, nombre à virgule flottante, chaîne de caractères, booléen et ressource), convertir une valeur en tableau retourne un tableau qui contient un élément (à l’index 0) qui est la valeur originale. Si vous convertissez un tableau en objet, vous obtiendrez des propriétés ou bien cet objet comme élément de tableau. Les clés créées sont les noms des membres avec quelques exceptions : les variables privées ont le nom de la classe ajouté au début du nom de la variable ; les variables protégées ont un ‘*’ ajouté au début du nom de la variable. Ces valeurs ajoutées ont des octets nuls dans l’autre sens. Ceci peut avoir un comportement inattendu.
class A { private $A; Ceci devient ‘\0A\0A’
}
class B extends A {
private $A; Ceci devient ‘\0B\0A’ public $AA; Ceci devient ‘AA’
}
var_dump1);
?> " |
Ce qui précède laisse penser que nous avons 2 clés nommées ‘AA’, alors qu’une seule est actuellement nommée ‘\0A\0A’.
Si vous convertissez la valeur “NULL” en tableau, vous obtiendrez un tableau vide.
===== Comparaisons de tableaux =====
Il est possible de comparer des tableaux grâce à la fonction array_diff() et aux opérateurs de tableaux.
===== Exemples =====
Le type tableau de PHP est très souple. Voici quelques exemples d’utilisation :
| Exemple 11-33. Utilisation des tableaux |
1)
array) new B(
Travail collaboratifContribuez, en ajjoutant des elements a cette page de manuel : Merci de votre aide |