TRANSFORMER UN TABLEAU MULTIDIMENSIONNEL EN TABLEAU UNIDIMENSIONNEL

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 22 déc. 2007 à 23:58
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 26 déc. 2007 à 14:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45164-transformer-un-tableau-multidimensionnel-en-tableau-unidimensionnel

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 déc. 2007 à 14:38
Lol bon, je laisse tomber.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
26 déc. 2007 à 14:22
http://fr.wikipedia.org/wiki/Programmation_fonctionnelle

php ne remplie clairement pas les criteres...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 déc. 2007 à 14:16
J'ai pas dit le contraire ? J'ai dit que tu pouvais sans problème simuler le même comportement. je n'ai jamais dit que "function" était un type en php.
Il n'en reste pas moins que is_callable() sur $test renverra true.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
26 déc. 2007 à 13:47
et ton gettype te renvoie string, function c'est pas un type de base en php... si tu te promenes du cote de caml ou autre, tu verras c'est autre chose le fonctionnel
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 déc. 2007 à 13:38
@Coucou => c'est ce que je disais, tu réflêchis en mode javascript en faisant du php. Tu ne simules pas correctement ta fonction :
<?php
function add($a){
return create_function('$b', 'return '.$a.'+$b;');
}

$test=add(5);
echo $test(3);
?>
kylekatarnls Messages postés 35 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 1 juillet 2008
25 déc. 2007 à 21:00
Whua, on utilise donc jamais le bon vocabulaire mince. Je viens de voir que PHP se rangeait dans la programmation impérative et était absente de la liste des langages fonctionnels, c'est bluffant car pour moi cela signifiait seulement que le langage utilisait principalement les fonctions.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
24 déc. 2007 à 12:25
on peut faire de la recursivite en php, de l'objet, mais php n'est en rien fonctionnel, javascript si par contre.

function add($a){
return create_function ('$b', 'return $a+$b;');
}

en faisant ca, la fonction cree croit que $a n'existe pas...

appeller add(3)(5); provoque une erreur de syntaxe, et faire :

$a=add(5);
echo $a(3);

n'affiche que 3...

ensuite, create_function renvoie un string et non une fonction (normal le type fonction n'existe pas en php puisque c'est pas un langage fonctionnel)
kylekatarnls Messages postés 35 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 1 juillet 2008
24 déc. 2007 à 12:09
COUCOU747, es-tu martien ?
Parce que sur ma planète à moi, ce que tu as écrit c'est du javascript c'est marrant et chez moi le PHP peut être orienté objet ou fonctionnel, c'est fou comme les choses sont différentes d'un endroit à l'autre ... :)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 déc. 2007 à 08:01
Comme je te le disais : on ne peut pas le faire de la même manière, mais tu peux très bien simuler le même comportement.
Et c'est pareil pour le "fonctionnel" : si tu joues sur la sémantique exacte, ok, mais tu peux très bien le simuler aussi avec create_function par exemple.
Et là, on parlait de faire de son code une (ou plusieurs) fonctions avec des appels récursifs.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
23 déc. 2007 à 23:10
j'allais oublier :
question : qqn peut-il me dire ce qui caracterise le fonctionnel ?
reponse : les fonctions du fonctionnel, ce sont des valeurs banales du langage
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
23 déc. 2007 à 23:05
bah fait le en php, cree une fonction add puis une fonction increment en faisant un truc genre :

increment=add(1); comme on ferait en caml ou comme j'ai fais en javascript
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 déc. 2007 à 23:02
"je ne sais pas avec quoi tu edites..."
=> Zend ? Eclipse ? Dreamweaver?

Je ne vois pas ce que tu ne peux pas faire en php, là ? Pas de la même manière, certes, mais php n'est pas javascript.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
23 déc. 2007 à 18:17
"La plupart des éditeurs faisant de l'autocomplétion l'ajouteront, en plus."=> je ne sais pas avec quoi tu edites...

sinon, php ne peut pas faire de foncionnel, mais par contre tu peux faire du recursif...
(ouais, une fonction c'est jamais une variable comme une autre...)

<script type="text/javascript">

function writeln(a){
document.write(a+"
");
}

add=function(a){
return function(b){return a+b};
}
increment=add(1);
writeln(increment(2));
writeln(add(2)(3));
</script>

ca t'iras jamais le refaire en php...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 déc. 2007 à 15:47
@Xaran, quand même : tu as tout à fait raison pour le
. Ceci dit...il faudrait peut-être commencer à vivre avec son temps. Ajouter /> à la fin d'un tag ne prend pas des heures. La plupart des éditeurs faisant de l'autocomplétion l'ajouteront, en plus. Cette recommendation a une raison d'être, et cette raison n'est pas d'emmerder les développeurs. C'est utile. A plus d'un titre. Un exemple à la con auquel on ne pense pas forcément : il m'arrive souvent de traiter du html comme du xml. Avec un tag
au milieu, c'est impossible. Et il y a un tas d'autres raisons pour passer à du xhtml correctement formé.
A ce compte là, autant coder en php3 avec des pages en html 3.2, et surfer avec un Netscape 4.x. Et se priver, donc, du progès.
A ce niveau-là, ce n'est pas être un rebelle refusant les lois du w3c, c'est être rétrograde.
xaraan Messages postés 6 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 14 janvier 2008
23 déc. 2007 à 13:58
Pour revenir sur le commentaire de Kylekatarnls,
n'est pas une erreur ... C'est juste pas du XHTML, il faut arrèter de croire que c'est le seul SGML pour le web ! Il y a aussi HTML 3.2, 4.01, etc...

Quant à la source, il est vrai, elle n'est pas bonne du tout. Je ne détaillerais pas mais je reproche les mêmes choses que Malalam. Sur ce, bonne continuation.
kylekatarnls Messages postés 35 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 1 juillet 2008
23 déc. 2007 à 12:34
C'est assez bourré de "fautes", à commencer par les économies de code que tu fais : 1 à la place de true,
à la place de
, tout ce qui ferait que ta source serait bien codée.
Ensuite il y a des choses qui peuvent être simplifiées et comme dit Malalam, ça pourrait être bien, le tout dans une fonction !
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 déc. 2007 à 12:17
Quand même, j'insiste (et j'explique ma note) : ce qui me met en rage, c'est que tu as eu une idée vraiment intéressante! Ce n'est pas si fréquent ici...C'est un code vraiment utile. Plus un snippet qu'un code source mais bon. Mais tu la gâches vraiment. C'est dommage.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 déc. 2007 à 12:13
Hello,

moi, je suis très mécontent de ton code. Pour plusieurs raisons : tu pars d'une idée intéressante. "Applatir" un tableau est intéressant, ça existe dans pas mal de langages.
Seulement, tu parles de fonction et propose du procédural. Du fonctionnel aurait été un minimum!
De plus, ton code est d'une lourdeur incroyable.
Enfin, je ne l'ai pas testé, mais je ne vois pas comment avec du procédural tu peux t'enorgueuillir d'applatir un tableau à X dimensions, où X est variable. Ca me parait impossible. Il faut du récursif pour ça, et tu ne peux pas faire du récursif en procédural. Donc à mon avis, ton code est faux (mais encore une fois, je ne l'ai pas testé, et pour être franc, je l'ai à peine regardé : il n'est pas nécessaire d'approfondir ton code pour voir qu'il est mal foutu).
Ok, je suis dur...mais je vais te montrer ce que tu aurais dû faire même en n'utilisant que php4. Parce qu'en php5 et avec la SPL, c'est encore plus simple.
<?php
$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");

function flatten($tab) {
static $flatten = array();
foreach($tab as $sub) {
if(is_array($sub)) {
flatten($sub);
} else {
$flatten[] = $sub;
}
}
return $flatten;
}

$b = flatten($a);
print_r($b);
?>

C'est évidemment valable pour ton autre code.
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
22 déc. 2007 à 23:58
Salut,

Je me rends compte seulement maintenant que mon commentaire sur ton autre source (TRANSFORMER UN TABLEAU D'OBJETS EN TABLEAU UNIDIMENSIONNEL), ben je voulais le mettre sur cette source... (j'avais pas fait gaffe que tu avais posté une deuxième source, et comme les titres sont assez similaires...)
Bon, en même temps, la question est valable pour les deux... ^^
Rejoignez-nous