Accueil > > > TRANSFORMER UN TABLEAU MULTIDIMENSIONNEL EN TABLEAU UNIDIMENSIONNEL
TRANSFORMER UN TABLEAU MULTIDIMENSIONNEL EN TABLEAU UNIDIMENSIONNEL
Information sur la source
Description
Quand je me suis retrouvé devant le problème de devoir gérer un tableau à X dimensions sans connaître X je me suis naturellement tourné vers la doc PHP mais je n'ai rien trouvé! J'ai donc développé ma propre fonction. Il n'y a rien à paramétrer, il suffit juste de donner le tableau multidimensionnel et ma fonction vous ressortira un tableau unidimensionnel. En espérant que cela pourra aider.
Source
- <?php
-
- //Tableau multidimensionnel que l'on désire transformer en tableau unidimensionnel
- $a = array ("a", "b", array ("zz", "yy", array ("aaa", "aab", array ("bbc1", "bbc2", "bbc3"))), "c", "d", array ("zza", "zzb", "zzc", "zzd", array ("yya", "yyb", "yyc", array ("xxa", "xxb", array ("wwa", "wwb", "wwc"))), "zze"), "e", "f");
-
- echo "tableau source : ";
- print_r ($a);
- echo "<br><br><br>";
-
- //On compte le nombre d'éléments contenus dans tous les tableaux
- $compte_tout_tableau = count ($a, 1);
-
- //On stocke les chemins amenant à un sous tableau
- $stock_tableau = array();
-
- //Tableau de sortie que l'on pourra travailler après
- $recup_donnees = array();
-
- //On va tester de manière récursive toutes les clefs et déterminer s'il s'agit d'un sosu tableau ou non
- for ($b=0;$b<=$compte_tout_tableau;$b++) {
-
- //On traite le 1er niveau
- if (empty ($stock_tableau) || empty ($niveau)) {
- $valeur_courante = current ($a);
- next ($a);
-
- //On regarde si c'est un tableau. Si c'est le cas on stocke le chemin dans le tableau $stock_tableau sinon on stocke la valeur dans $recup_donnees. Si on a atteint la fin du 1er niveau du tableau on met une
- //séparation et on passe au 2ème niveau
- if (is_array ($valeur_courante)) {
- $clef = array_search ($valeur_courante, $a);
- array_push ($stock_tableau, $clef);
- } else if (empty ($valeur_courante)) {
- array_push ($stock_tableau, "/,,/");
- array_push ($recup_donnees, "/,,/");
- $niveau = 1;
- } else {
- array_push ($recup_donnees, $valeur_courante);
- }
-
- //On traite les niveaux supérieurs
- } else {
- //On récupère le chemin indiquant un sous dossier
- $valeur_courante2 = current ($stock_tableau);
- next ($stock_tableau);
-
- //Niveau 3 et supérieur
- if (is_array ($valeur_courante2)) {
-
- //On compte le nombre de valeurs contenu dans le tableau unidimensionnel contenu dans la variable $valeur_courante2
- $compte_tableau3 = count ($valeur_courante2);
-
- //On copie le tableau pour le triturer et ainsi ne pas abîmer le tableau original
- $resultat2 = $a;
-
- //On récupère la dernière valeur du tableau $valeur_courante2
- $valeur_fin2 = end ($valeur_courante2);
-
- //On récupère la ou les clef(s) correspondant à la dernière valeur du tableau $valeur_courante2
- $valeur_fin3 = array_keys ($valeur_courante2, $valeur_fin2);
-
- //On regarde s'il y a plus d'une clef pour la dernière valeur et si oui, on récupère la dernière
- if (count ($valeur_fin3) > 1) {
- $valeur_fin = end ($valeur_fin3);
- } else {
- $valeur_fin = $valeur_fin3[0];
- }
-
- //On épeluche le tableau $resultat2 pour obtenir le morceau désiré
- for ($d=0;$d<$compte_tableau3;$d++) {
- //Le +0 est très important sinon le résultat obtenu sera tout autre
- $resultat2 = $resultat2[$valeur_courante2[$d]+0];
- }
-
- //On compte le nombre de valeurs restantes
- $compte_tableau4 = count ($resultat2);
-
- //On regarde pour chaque clef si la valeur est un tableau ou une simple valeur
- for ($e=0;$e<$compte_tableau4;$e++) {
- //Si on a un tableau on sort du tableau renvoyé le chemin auquel on ajoute le dernier tronçon, la dernière clef et on remet tout dans un tableau stocké dans $stock_tableau
- if (is_array ($resultat2[$e])) {
- $clef3 = array_search ($resultat2[$e], $resultat2);
- $boom = implode (",", $valeur_courante2);
- $boom2 = "$boom, $clef3";
- $colle = explode (",", $boom2);
- array_push ($stock_tableau, $colle);
- } else {
- //Si on a une valeur on la stocke dans $recup_donnees
- array_push ($recup_donnees, $resultat2[$e]);
- }
- }
-
- //Une fois le niveau courant terminé (2ème ou supérieur) on met une séparation et l'on passe au niveau suivant
- } else if (empty ($valeur_courante2) || !is_numeric($valeur_courante2)) {
- $verif = count ($stock_tableau)-1;
-
- if ($stock_tableau[$verif] != "/,,/") {
- array_push ($stock_tableau, "/,,/");
- array_push ($recup_donnees, "/,,/");
- }
-
- //Niveau 2
- } else {
- //On compte le nombre de clefs pour arriver au tableau indiqué dans $stock_tableau
- $compte_tableau2 = count ($a[$valeur_courante2]);
-
- //On récupère la valeur courante
- $resultat = $a[$valeur_courante2];
-
- //On tri à nouveau pour savoir si la valeur renvoyée est un tableau ou une valeur. tableau = $stock_tableau, valeur = $recup_donnees
- for ($c=0;$c<$compte_tableau2;$c++) {
- if (is_array ($resultat[$c])) {
- $clef2 = array_search ($resultat[$c], $resultat);
- array_push ($stock_tableau, array ($valeur_courante2, $clef2));
- } else {
- array_push ($recup_donnees, $resultat[$c]);
- }
- }
- }
- }
- }
-
- echo "<br><br><br>";
- echo "Contenu du tableau ".'$recup_donnees : ';
- print_r ($recup_donnees);
-
- ?>
<?php
//Tableau multidimensionnel que l'on désire transformer en tableau unidimensionnel
$a = array ("a", "b", array ("zz", "yy", array ("aaa", "aab", array ("bbc1", "bbc2", "bbc3"))), "c", "d", array ("zza", "zzb", "zzc", "zzd", array ("yya", "yyb", "yyc", array ("xxa", "xxb", array ("wwa", "wwb", "wwc"))), "zze"), "e", "f");
echo "tableau source : ";
print_r ($a);
echo "<br><br><br>";
//On compte le nombre d'éléments contenus dans tous les tableaux
$compte_tout_tableau = count ($a, 1);
//On stocke les chemins amenant à un sous tableau
$stock_tableau = array();
//Tableau de sortie que l'on pourra travailler après
$recup_donnees = array();
//On va tester de manière récursive toutes les clefs et déterminer s'il s'agit d'un sosu tableau ou non
for ($b=0;$b<=$compte_tout_tableau;$b++) {
//On traite le 1er niveau
if (empty ($stock_tableau) || empty ($niveau)) {
$valeur_courante = current ($a);
next ($a);
//On regarde si c'est un tableau. Si c'est le cas on stocke le chemin dans le tableau $stock_tableau sinon on stocke la valeur dans $recup_donnees. Si on a atteint la fin du 1er niveau du tableau on met une
//séparation et on passe au 2ème niveau
if (is_array ($valeur_courante)) {
$clef = array_search ($valeur_courante, $a);
array_push ($stock_tableau, $clef);
} else if (empty ($valeur_courante)) {
array_push ($stock_tableau, "/,,/");
array_push ($recup_donnees, "/,,/");
$niveau = 1;
} else {
array_push ($recup_donnees, $valeur_courante);
}
//On traite les niveaux supérieurs
} else {
//On récupère le chemin indiquant un sous dossier
$valeur_courante2 = current ($stock_tableau);
next ($stock_tableau);
//Niveau 3 et supérieur
if (is_array ($valeur_courante2)) {
//On compte le nombre de valeurs contenu dans le tableau unidimensionnel contenu dans la variable $valeur_courante2
$compte_tableau3 = count ($valeur_courante2);
//On copie le tableau pour le triturer et ainsi ne pas abîmer le tableau original
$resultat2 = $a;
//On récupère la dernière valeur du tableau $valeur_courante2
$valeur_fin2 = end ($valeur_courante2);
//On récupère la ou les clef(s) correspondant à la dernière valeur du tableau $valeur_courante2
$valeur_fin3 = array_keys ($valeur_courante2, $valeur_fin2);
//On regarde s'il y a plus d'une clef pour la dernière valeur et si oui, on récupère la dernière
if (count ($valeur_fin3) > 1) {
$valeur_fin = end ($valeur_fin3);
} else {
$valeur_fin = $valeur_fin3[0];
}
//On épeluche le tableau $resultat2 pour obtenir le morceau désiré
for ($d=0;$d<$compte_tableau3;$d++) {
//Le +0 est très important sinon le résultat obtenu sera tout autre
$resultat2 = $resultat2[$valeur_courante2[$d]+0];
}
//On compte le nombre de valeurs restantes
$compte_tableau4 = count ($resultat2);
//On regarde pour chaque clef si la valeur est un tableau ou une simple valeur
for ($e=0;$e<$compte_tableau4;$e++) {
//Si on a un tableau on sort du tableau renvoyé le chemin auquel on ajoute le dernier tronçon, la dernière clef et on remet tout dans un tableau stocké dans $stock_tableau
if (is_array ($resultat2[$e])) {
$clef3 = array_search ($resultat2[$e], $resultat2);
$boom = implode (",", $valeur_courante2);
$boom2 = "$boom, $clef3";
$colle = explode (",", $boom2);
array_push ($stock_tableau, $colle);
} else {
//Si on a une valeur on la stocke dans $recup_donnees
array_push ($recup_donnees, $resultat2[$e]);
}
}
//Une fois le niveau courant terminé (2ème ou supérieur) on met une séparation et l'on passe au niveau suivant
} else if (empty ($valeur_courante2) || !is_numeric($valeur_courante2)) {
$verif = count ($stock_tableau)-1;
if ($stock_tableau[$verif] != "/,,/") {
array_push ($stock_tableau, "/,,/");
array_push ($recup_donnees, "/,,/");
}
//Niveau 2
} else {
//On compte le nombre de clefs pour arriver au tableau indiqué dans $stock_tableau
$compte_tableau2 = count ($a[$valeur_courante2]);
//On récupère la valeur courante
$resultat = $a[$valeur_courante2];
//On tri à nouveau pour savoir si la valeur renvoyée est un tableau ou une valeur. tableau = $stock_tableau, valeur = $recup_donnees
for ($c=0;$c<$compte_tableau2;$c++) {
if (is_array ($resultat[$c])) {
$clef2 = array_search ($resultat[$c], $resultat);
array_push ($stock_tableau, array ($valeur_courante2, $clef2));
} else {
array_push ($recup_donnees, $resultat[$c]);
}
}
}
}
}
echo "<br><br><br>";
echo "Contenu du tableau ".'$recup_donnees : ';
print_r ($recup_donnees);
?>
Conclusion
Ce petit script m'a en fait servi de squelette pour transformer un tableau d'objets renvoyé par la fonction imap_fetchstructure pour la gestion d'un webmail que j'avais développé il y a quelques années et que je remets à jour (http://r-mail.sourceforge.net)
Sources du même auteur
Sources de la même categorie
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBERÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE Le code est simple, il permet depuis une url youtube de récupérer son identifiant et de se connecter au serveur de miniatures pour en récupérer les im...
par tefa24600
CONVERTISSEUR DE NOMBRES EN TEXTECONVERTISSEUR DE NOMBRES EN TEXTEQu'est-ce ? Un convertisseur de nombre en texte.
Ses particularités?
- pas de limitation sur la taille du nombre (traitement en string, et non en ...
par macruz
CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECe script php permet, comme son nom l'indique de coder un texte pour remplacer les caractères spéciaux, ou apprendre à comprendre les htmlentities, sp...
par Salva9473
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
transformer un tableau multidimensionnel en chaine de caracteres [ par franco_se ]
bonjour a tous.voila, je cherche a enregistrer un tableau multidimensionnel dans un champ de ma table sql .le probleme est que, lorsque je fais "inser
transformer un tableau multidimensionnel javascript en tableau multidimensionnel php [ par sagat06 ]
Bonjour à tous.Je tiens à préciser que mon niveau en php est assez limité, mes excuses, je tenterai d'y remédier.Voilà mon soucis: actuellement sur un
transformer un tableau en objet [ par franco_se ]
HelloJe souhaiterai transformer un tableau multidimensionnel en objet.Existe-t-il une fonction ( a la maniere de mysql_fetch_object ) ?Ou faut-il en
Trier tableau multidimensionnel [ par Aaron ]
Bonjour,Je souhaiterais trier ce tableau multidimensionnel : Array( [1] => Array( [Num] => 5 [LastCrPV] => 10 [We
Comment stocker un tableau multidimensionnel dans une variable de session [ par AmStErDaMnEd ]
Bonjour, Je souhaite stocker un tableau multidimensionnel dans une variable de session. J'ai fait de nombreux test("$_SESSION['var'] = $tab" ou enc
remplacement d'une chaine de caractere dans un tableau multidimensionnel [ par franco_se ]
HelloComme le dit le titre, j'ai un probleme de remplacement d'une chaine de caractere dans un tableau multidimensionnelJ'ai essayer la fonction str_r
Comparaison de tableau (array) [ par utilisateurbox ]
Bonjour,Je cherche une fonction PHP qui puisse me dire dans un tableau ne contenant que des valeurs numériques celles qui sont manquante et me le sort
enregistre un tableau dans une base de donnees [ par fadoua123 ]
Bonjoursvp je veux savoir est ce que c est possible d'enregistrer un tableau multidimensionnelle(comme une matrice)dans base de données,si oui comment
PHP, formulaire et innerHTML [ par ExeQTd ]
Bonjour à tous,Je suis actuellement confronté à un petit souci technique. Autant le dire tout de suite, je suis débutant dans le monde du web 2.0 et j
Transmettre un tableau javascript à Php [ par CODE MAN ]
bonjour à tous,j'ai une fonction javascript qui retourne les cordonnées x et y de mes div sur une page donnée. ma fonction marche très bien sauf que a
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|