Les tableaux
Créer un tableau
Pour créer un tableau, il faut utiliser la structure array. Un tableau array peut se créer via la fonction array()
Un tableau permet d’associer une valeur à un index.
Un index peut être :
- Un entier
- Une chaine de caracteres : tableau associatif
$tableau = array(5,6,8);
$tableau = array(1=>8,2=>9,3);
$tableau = array('T','N','T');
Si dans un tableau, aucun index n’a été spécifié, la valeur du premier index est 0.
Si dans un tableau, un index à une valeur négative, la valeur du prochain index est 0.
Sinon, le prochain index sera la valeur du dernier index ayant existé +1
| Type | Valeur | Resultat |
| boolean | true false |
1 0 |
| float | 5.7 5.32 |
5 5 |
| objet | stdclass | erreur |
| array | erreur |
Ajouter une valeur
Pour ajouter une valeur à un tableau, il suffit d’ajouter les crochets à la variable tableau.
$monTableau[] = 'ma valeur';
Pour spécifier un index à ma valeur, il faut ajouter la valeur de l’index entre crochets
$monTableau['index'] = 'ma valeur';
Supprimer une valeur de tableau et le tableau
unset($monTableau); unset($monTableau['index']);
Afficher un tableau
Pour afficher un tableau, on emploira la fonction :
print_r($monTableau);
Les opérateurs
| Opérateur | Effet |
| [] | Lit ou écrit dans un tableau |
| + | Union si et seulement si les index diffèrent. |
| == / != | Test si les deux tableaux ont/n’ont pas le même ensemble d’index et valeur peut importe l’ordre |
| === / !== | Test si les deux tableaux ont/n’ont pas le même ensemble d’index et valeur, dans le meme ordre et du même type |
$t1 = array(1,2,3); $t2 = array(2=>3,1=>2,0=>1); $t3 = array(2=>3,1=>2,5=>'1'); $t4 = array(1,2,'3'); $t5 = array(4,5,6); print_r($t1+$t5); // Array ( [0] => 1 [1] => 2 [2] => 3 ) var_dump($t1==$t2); //true var_dump($t1===$t2); //false var_dump($t1==$t4); //true var_dump($t1===$t4); //false
Verifier l’existance
d’un index
Afin de vérifier si une clé ou une valeur existe dans un tableau, on emploira : isset()
« isset() » est une structure de langage, ce n’est pas une fonction
Il existe aussi array_key_exists() qui elle, est une fonction de surcharge et donc moins rapide
d’une valeur
Pour savoir si une valeur existe, on emploira in_array() qui est une fonction qui retourne un booleen.
Il existe aussi array_search() qui retourne l’index de la valeur recherchée.
$t1 = array(1,2,3); if ( !in_array ( $t1,$t1 ) ) echo 'foo';
Itération
- foreach
- for
- while
- pointeur
foreach
foreach ( $monTableau as [ $monIndex =>] [&]$maValeur ){
}
Attention : jusqu’a présent, la valeur du tableau ne pouvait être modifié lors d’un foreach car le foreach travaillait uniquement avec une copie de tableau. Depuis PHP5, il est possible de passer le tableau par référence en ajoutant le mot clé « & » devant la valeur.
Attention : si on passe par référence la valeur, on garde la référence jusqu’a la fin du script!
for
le for est adapté pour les tableaux ayant pour index des valeurs numériques
//A ne pas faire for ( $i=0 ; count ( $monTableau ) ; $i++; ) ... //A privilegier $b = count ( $monTableau ); for ( $i=0 ; $b ; $i++; ) ...
while / each / list
while( $rec = each( $tableau ) ){
echo "{$rec['value']}-{$rec['key']}";
}
« list » est une structure de langage, ce n’est pas une fonction.
La structure list permet de mettre les valeurs d’un tableau dans des variables individuelles.
Ommetre une variable en laissant une virgule permet de passer un élément du tableau. Ne fonctionne uniquement pour les tableaux indexés numériquement ET commencant par 0 et les index se suivant (+1).
while( list($var1,,$var3) = $tableau ) ...
Les pointeurs
Le pointeur permet de naviguer dans un tableau. Pour utiliser le pointeur dans un tableau, on utilisera les fonctions suivantes :
-
key
Attention : Peut retourner null - current
- next
- prev
- reset
- end
while( key ( $tableau ) !== null){
echo current ( $tableau );
next ( $tableau );
}
Attention : le pointeur est passé par référence, si on veut retravailler dessus apres un parcours, il faut faire un reset
Lorsque le pointeur pointe sur un élément du tableau qui n’existe pas, le pointeur est perdu.
Tri de tableau
Les fonctions essentielles
- sort
- asort
- ksort
- arsort
- krsort
- rsort
r : reverse, tri décroissant.
k : key, tri les clés.
a : associative, tri en gardant les clés.
$t1 = array(1,2,3);
| sort | asort | ksort | arsort | krsort | rsort |
sortArray
(
[0] => 1
[1] => 2
[2] => 3
)
|
asortArray
(
[0] => 1
[1] => 2
[2] => 3
)
|
ksortArray
(
[0] => 1
[1] => 2
[2] => 3
)
|
arsortArray
(
[2] => 3
[1] => 2
[0] => 1
)
|
krsortArray
(
[2] => 3
[1] => 2
[0] => 1
)
|
rsortArray
(
[0] => 3
[1] => 2
[2] => 1
)
|
$t2 = array(8=>4,6=>3,1=>1);
| sort | asort | ksort | arsort | krsort | rsort |
sortArray
(
[0] => 1
[1] => 3
[2] => 4
)
|
asortArray
(
[0] => 1
[1] => 3
[2] => 4
)
|
ksortArray
(
[0] => 1
[1] => 3
[2] => 4
)
|
arsortArray
(
[2] => 4
[1] => 3
[0] => 1
)
|
krsortArray
(
[2] => 4
[1] => 3
[0] => 1
)
|
rsortArray
(
[0] => 4
[1] => 3
[2] => 1
)
|
$t3 = array('A','a','C','c');
| sort | asort | ksort | arsort | krsort | rsort |
sortArray
(
[0] => A
[1] => C
[2] => a
[3] => c
)
|
asortArray
(
[0] => A
[1] => C
[2] => a
[3] => c
)
|
ksortArray
(
[0] => A
[1] => C
[2] => a
[3] => c
)
|
arsortArray
(
[3] => c
[2] => a
[1] => C
[0] => A
)
|
krsortArray
(
[3] => c
[2] => a
[1] => C
[0] => A
)
|
rsortArray
(
[0] => c
[1] => a
[2] => C
[3] => A
)
|
$t4 = array('A',3,'z',256);
| sort | asort | ksort | arsort | krsort | rsort |
sortArray
(
[0] => A
[1] => z
[2] => 3
[3] => 256
)
|
asortArray
(
[0] => A
[1] => z
[2] => 3
[3] => 256
)
|
ksortArray
(
[0] => A
[1] => z
[2] => 3
[3] => 256
)
|
arsortArray
(
[3] => 256
[2] => 3
[1] => z
[0] => A
)
|
krsortArray
(
[3] => 256
[2] => 3
[1] => z
[0] => A
)
|
rsortArray
(
[0] => 256
[1] => 3
[2] => z
[3] => A
)
|
$t5 = array('Alain','Adrien','aLain','alain');
| sort | asort | ksort | arsort | krsort | rsort |
sortArray
(
[0] => Adrien
[1] => Alain
[2] => aLain
[3] => alain
)
|
asortArray
(
[0] => Adrien
[1] => Alain
[2] => aLain
[3] => alain
)
|
ksortArray
(
[0] => Adrien
[1] => Alain
[2] => aLain
[3] => alain
)
|
arsortArray
(
[3] => alain
[2] => aLain
[1] => Alain
[0] => Adrien
)
|
krsortArray
(
[3] => alain
[2] => aLain
[1] => Alain
[0] => Adrien
)
|
rsortArray
(
[0] => alain
[1] => aLain
[2] => Alain
[3] => Adrien
)
|
$t6 = array('A'=>4,'a'=>10,256=>'B');
| sort | asort | ksort | arsort | krsort | rsort |
sortArray
(
[0] => B
[1] => 4
[2] => 10
)
|
asortArray
(
[0] => B
[1] => 4
[2] => 10
)
|
ksortArray
(
[0] => B
[1] => 4
[2] => 10
)
|
arsortArray
(
[2] => 10
[1] => 4
[0] => B
)
|
krsortArray
(
[2] => 10
[1] => 4
[0] => B
)
|
rsortArray
(
[0] => 10
[1] => 4
[2] => B
)
|
Les fonctions de tableau
Il est possible de spécifier un traitement spécifique pour un tableau. On appelle ça le callback.
array_walk/array_wal_recursive
function maFonction( $value, $key ){
echo "mon indice $key vaut $value";
}
$monTableau =array(1,2,3,4=>array('S','T'));
array_walk( $monTableau,'maFonction' );
array_walk_recursive( $monTableau,'maFonction' );
Tableau et chaine de caractères
Il est possible de créer un tableau à partir d’une chaine et vice versa. Pour cela, on utilisera implode et explode
implode(separateur,tableau); explode(separateur,chaine);
Pile et file d’attente
Pour un tableau, il existe deux schema pour ajouter ou retirer des données.
- La pile : LIFO (ex: pile d’assiette)
- La file d’attente : FIFO (ex: guichet)
Les fonctions de piles
+array_push()
-array_pop()
Les fonctions de file d’attente
+array_unshift()
-array_shift()
//Pile
$tab = array('Pierre','Paul');
array_push($tab,'Jacques');
print_r($tab); // Pierre Paul Jacques
array_pop($tab);
print_r($tab); // Pierre Paul
//File d'attente
$tab = array('Pierre','Paul');
array_unshift($tab,'Jacques');
print_r($tab); // Jacques Pierre Paul
array_shift($tab);
print_r($tab); // Pierre Paul
Opération ensembliste
Les opérations ensemblistes permettent de regrouper,fusionner,assembler de deux à n tableaux
array_merge : union de deux à n tableaux. Si un index existe déja, il sera absorbé par le premier tableau
$t1 = array('a'=>'Feu','b'=>'Eau');
$t2 = array('a'=>'Vent','c'=>'Terre');
$c = array_merge($a,$b); //Feu, Eau, Terre
Autres fonctions à connaitre
- array_intersect : intersec = ce qui correspond
- array_intersect_key
- array_intersect_assoc
- array_diff
- array_diff_key
- array_diff_assoc
- extract : extrait les clés d’un tableau en variable contenant leur valeur
$tab = array('Nom'=>'Pierre','Prenom'=>'Paul');
extract($tab,EXTR_PREFIX_SAME,"wddx");
echo $Nom.' '.$Prenom;
Exercice :
Obligation d’utiliser smarty, obligation d’avoir des pages valides w3c.
A partir d’un fichier téléchargeable concu de la maniere suivante :
1#Quelle est la capitale de la France#Paris|Vienne|Londres|Venise#1 2#Ou se trouve Paris?#USA|France|Angleterre#1-2
Vous établirez un quizz en demandant à l’utilisateur s’il souhaite avoir les questions aléatoirement ou pas. Le nombre de questions qu’il souhaite répondre. S’il veut répondre au 5 dernieres ou juste les 2 spremieres

Commentaires récents