Division, fusion, différence et intersection de tableaux

Taiter et manipuler les tableaux avec PHP

PHP nous fournit encore un bon nombre de manière pour traiter et manipuler les tableaux. Cette fois ci, on se penchera dans des études plus poussées sur les tableaux, notamment sur la relation entre chaîne de caractère et les tableaux, opération entre plusieurs tableaux, etc.

Bref, on abordera plusieurs techniques usuelles sur l'utilisation des tableaux.

Une relation étroite existe entre les traitements de chaînes de caractères et les tableaux. On peut alors transformer une séquence de chaîne de caractère en tableau, et inversement un tableau en une séquence de chaines de caractères.

Un séparateur jouera le rôle d'identificateur du découpage et mettra en exergue chaque élément du tableau. Voyons tout de suite cela à l'aide d'un exemple :

<?php
$list_fruit = "pomme, orange, kiwi, poire";
$tab_fruit = explode(",", $list_fruit);
echo "Le tableau des fruits:";
echo "<pre>";
print_r($tab_fruit);
echo "</pre>";
?>

 

Ici, la fonction explode() crée un tableau avec la chaine de caractère et le tableau crée contient comme élément chaque sous chaine délimitée par le séparateur : ",".

Inversement, un autre principe consiste à concaténer tous les éléments du tableau de façon à ce que le séparateur en argument sépare les éléments en plusieurs groupes distincts. Le résultat sera alors une chaine de caractères composée des éléments du tableau dont chaque élément du tableau est délimité par le séparateur.

Cela nous permet de générer une liste par exemple.

<?php
$tab_fruit = array("pomme", "orange", "poire");
$list_fruit = implode($tab_fruit, ",");
echo $list_fruit;
?>

 

Division et fusion de tableaux avec PHP

Il est souvent utile de diviser un tableau en plusieurs sous tableaux ou bien encore de fusionner plusieurs tableaux afin d'en obtenir un de taille plus conséquente. Voyons voir comment faire cela.

Division d'un tableau en plusieurs : array_chunk

"Diviser pour mieux régner", parfois il est aussi nécessaire de découper les tableaux en petit tableaux. La fonction array_chunk() sépare un tableau en plusieurs dont la taille est déterminée par le deuxième argument de la fonction.

Découpons par exemple notre fameux tableau des étudiants pour former le tableau des binômes (taille = 2).

<?php
$etudiant= array ("Alissa", "Mickael", "Shania", "Odile", "Stefanie", "Marianne", "Sophie","Marco");
echo "Le tableau des étudiants:";
echo "<pre>";
print_r($etudiant);
echo "</pre>";

//Découpage du tableau
$binome = array_chunk($etudiant, 2);

echo "Le tableaux des binômes:";
echo "<pre>";
print_r($binome);
echo "</pre>";

echo "Le premier binôme:";
echo "<pre>";
print_r($binome[0]);
echo "</pre>";
?>

 

Les étudiants sont alors groupés deux à deux et le premier binôme est constitué d'Alissa et de Mickael.

Fusion des tableaux en PHP : array_merge

Cependant "l'union fait la force", une fonction inverse de array_chunk() est là pour ça. Il s'agit de array_merge() qui fusionne les petits tableaux en un grand tableau. Dans notre exemple, les deux premiers binômes d'étudiant veulent s'unir pour former un groupe de quatre étudiants :

<?php
//tableau de départ

$etudiant= array ("Alissa", "Mickael", "Shania", "Odile", "Stefanie", "Marianne", "Sophie","Marco");
echo "Le tableau des étudiants:";
echo "<pre>";
print_r($etudiant);
echo "</pre>";

//Découpage du tableau
$binome = array_chunk($etudiant,2);

//Les binômes
echo "Le tableaux des binômes:";
echo "<pre>";
print_r($binome);
echo "</pre>";

//regroupement des deux premiers binômes
$etudiant_regroupe = array_merge($binome[0],$binome[1]);
echo "Le regroupement des deux binôme:";
echo "<pre>";
print_r($etudiant_regroupe);
echo "</pre>";
?>

 

Différence entre tableaux : array_diff

Supposons maintenant que l'on ait deux tableaux de groupes d'étudiants : $natation qui contient les étudiants qui font de la natation et $danse contient les étudiants qui font de la danse.

On souhaite avoir les étudiants qui ne font que de la natation, c'est-à-dire qui ne font pas de la danse. Dans ce cas on fait la différence des deux tableaux à l'aide de la fonction array_diff().

<?php
$natation = array ("Alissa", "Mickael", "Shania", "Odile", "Stefanie","Anaia", "Marianne", "Sophie","Marco","Zora");
$danse = array ("Natacha", "Mickael", "Shania", "Michèle", "Stefanie", "Adrien", "Patrick","Marco");
$diff = array_diff($natation,$danse );
echo "Ces étudiants ne font pas de la danse mais seulement de la natation:";
echo "<pre>";
print_r($diff);
echo "</pre>";
?>

 

Ceci renvoie à l'écran le tableau de la liste des étudiants qui ne font de la natation :

Array
(
[0] => Alissa
[3] => Odile
[5] => Anaia
[6] => Marianne
[7] => Sophie
[9] => Zora
)

 

Intersection entre tableaux et fonction array_intersect

A partir du même exemple, construisons maintenant un autre tableau qui contient les étudiants qui font les deux activités à la fois. Autrement dit, cherchons l'intersection entre les tableaux $natation et $danse en utilisant la fonction array_intersect().

<?php
$natation = array ("Alissa", "Mickael", "Shania", "Odile", "Stefanie","Anaia", "Marianne", "Sophie","Marco","Zora");
$danse = array ("Natacha", "Mickael", "Shania", "Michèle", "Stefanie", "Adrien", "Patrick","Marco");
$intersect = array_intersect($natation,$danse );

echo "Ces étudiants font à la fois de la danse et de la natation:";
echo "<pre>";
print_r($intersect);
echo "</pre>";
?>

 

On aura donc un tableau des étudiants qui font à la fois de la danse et de la natation :

Array
(
[1] => Mickael
[2] => Shania
[4] => Stefanie
[8] => Marco
)

 

A propos de l'auteur

Nicolas Galle

Nicolas Galle est développeur web sénior pour l'agence SEO Aseox.