Soyez le premier à donner votre avis sur cette source.
Vue 11 205 fois - Téléchargée 124 fois
<?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); ?>
26 déc. 2007 à 14:38
26 déc. 2007 à 14:22
php ne remplie clairement pas les criteres...
26 déc. 2007 à 14:16
Il n'en reste pas moins que is_callable() sur $test renverra true.
26 déc. 2007 à 13:47
26 déc. 2007 à 13:38
<?php
function add($a){
return create_function('$b', 'return '.$a.'+$b;');
}
$test=add(5);
echo $test(3);
?>
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.