Skip to content

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