PHP, besoin d'une info

Ok ok ok ne vous fâchez pas :smiley:

Vos explications sont très claires. LE truc qui me dérangeait vraiment c’était plus le test de la condition de sortie. Vu l’écriture, j’ai l’impression que l’évaluation devrait être faite sur le retour de list (mais comme list est de type void, que nenni) ou sur le déploiment de cette espèce de macro qu’est list… enfin rien de tout ça… il faut considérer que c’est le retour de each qui est testé… mais il reste tout de même un point curieux : each retourne FALSE lorsqu’il arrive en fin de tableau, OK mais lorsque ce n’est pas la fin de tableau, each retourne un tableau et c’est lui qui est testé ???

En clair « while( $MyArray ) » ça fait bizarre, non ? :wink: (non non each ne retourne pas TRUE lorsque ça rulez)

[quote]La formulation qui te pose problème utilise des notions qui viennent du C et qui sont complétement absconses. En plus, la syntaxe utilise list() et each(), qui sont aussi des fonctions spéciales.
Ne te prends pas la tête avec ces fonctions, passe à autre chose.

Le php est un langage suffisamment riche et clair pour que tu puisses l’utiliser complétement sans utiliser les syntaxes les plus tordues. (héritées du C)

Je fais du PHP a haute dose depuis plus de deux ans, et je peux te dire que j’essaie de programmer proprement. Et bien figure-toi que je n’ai jamais utilisé cette fonction, à l’exception de l’exemple que tu as donné, et qui est très pratique.

Le Php est super pratique dans la gestion des tableaux. Il y a des pièges à éviter, des choses qu’on apprend avec le temps, après avoir pratiqué.
(par exemple l’egalité: je déconseille d’utiliser l’opérateur « == », je conseille plutôt « === », sauf dans les cas spécifiques bien entendu)

Bref, prends ton pieds avec ce langage, amuse toi, et seulement après, reviens à cette syntaxe pour essayer de la comprendre. Ou bien n’essaie pas de la comprendre, utilise-là telle quelle, elle est super pratique.
Ou alors, n’utilise pas cette fonction, il y a plein d’autres moyens de parcourir un tableau à n dimensions.[/quote]moi ca fait 6 mois que je pratique php, par contre je connaisais meme pas le « === » :wink:
honte a moi tu peut me renseigner,pourquoi c’est mieux ?

euh, sinon j’avais bon dans mes explication list est un trucs zarb mais pratique.

[quote]En plus, la syntaxe utilise list() et each(), qui sont aussi des fonctions spéciales.
Le php est un langage suffisamment riche et clair pour que tu puisses l’utiliser complétement sans utiliser les syntaxes les plus tordues. (héritées du C)[/quote]Dixit mon tit linux tout mignon:
lonewolf@bastion:~$ man 3 list
No entry for list in section 3 of the manual
lonewolf@bastion:~$ man 3 each
No entry for each in section 3 of the manual

La section 3 etant C Programming, je t’affirme que ca n’existe pas en C, ce genre de pirouette (je suis un peu comme Moktar, j’ai pas tres bien compris la bidouille… Il est fort, l’Universal_Tonton, avec ces algos terrifiants pour la joybase, hein ;))

LoneWolf
Le C, c’est pas du PHP, et vice versa :smiley:

La formulation qui te pose problème utilise des notions qui viennent du C et qui sont complétement absconses. En plus, la syntaxe utilise list() et each(), qui sont aussi des fonctions spéciales.
Ne te prends pas la tête avec ces fonctions, passe à autre chose.

Le php est un langage suffisamment riche et clair pour que tu puisses l’utiliser complétement sans utiliser les syntaxes les plus tordues. (héritées du C)

Je fais du PHP a haute dose depuis plus de deux ans, et je peux te dire que j’essaie de programmer proprement. Et bien figure-toi que je n’ai jamais utilisé cette fonction, à l’exception de l’exemple que tu as donné, et qui est très pratique.

Le Php est super pratique dans la gestion des tableaux. Il y a des pièges à éviter, des choses qu’on apprend avec le temps, après avoir pratiqué.
(par exemple l’egalité: je déconseille d’utiliser l’opérateur “==”, je conseille plutôt “===”, sauf dans les cas spécifiques bien entendu)

Bref, prends ton pieds avec ce langage, amuse toi, et seulement après, reviens à cette syntaxe pour essayer de la comprendre. Ou bien n’essaie pas de la comprendre, utilise-là telle quelle, elle est super pratique.
Ou alors, n’utilise pas cette fonction, il y a plein d’autres moyens de parcourir un tableau à n dimensions.

[quote]Mhhh oui je me prends la tête mais c’est pour bien comprendre le fonctionnement de l’interpréteur et non pas avoir une recette de cuisine :smiley:

Dans l’exemple suivant, le second list n’est pas suivi de ‹ = › ;), l’un de vous peut-il décrire pas à pas le comportement de l’expression « while( cond ) ». Le contenu je m’en fou, je cherche à voir comment PHP se démerde.

while( list($key, list($k, $term, $tcount))=each($ar) )
{
if (empty($k)) continue;
echo « $term »;
echo $tcount;
echo «  »;
}[/quote]
facile, on a each qui va retourne une ligne du tableau $ar (puis va la suivante), sauf que ici la ligne du tableau $ar est plus compliqué que tout a l’heure car elle contient une variable toute simple + un autre tableau

donc pour foutre tout ce bordel dans des variables
il faut utiliser list($key, list($k, $term, $tcount))=each($ar)
ce qui equivaut a
$v = each($ar)
$key=$v[0];
$k = $v[1][0];
$term = $v[1][1];
$tcount = $v[1][2];

une syntaxe nettement plus longue

résumé :

while( list($key, list($k, $term, $tcount))=each($ar) )
{
if (empty($k)) continue;
echo « $term »;
echo $tcount;
echo «  »;
}

équivaut a

while( $v=each($ar) )
{
$key=$v[0];
$k = $v[1][0];
$term = $v[1][1];
$tcount = $v[1][2];

if (empty($k)) continue;
echo « $term »;
echo $tcount;
echo «  »;
}

OK ou KO ? :wink:

peux tu me dire si mon explication precedente t’as servi?

sinon pour ton cas:
while( list($key, list($k, $term, $tcount))=each($ar) )

C’est identique. Ce qui te perturbe c’est que les valeur de variable du premier tableau, qui aurait été $var dans l’exemple precedent est aussi un tableau.

les variables contenu dans $ar sont ce ce type

$ar=array

$ar[‘nom’]=array(‘toto’, ‘titi’, ‘tata’);
$ar[‘nom1’]=array(‘toto1’, ‘titi1’, ‘tata1’);

[Edité le 12/2/2003 par McGuffin]

Mhhh oui je me prends la tête mais c’est pour bien comprendre le fonctionnement de l’interpréteur et non pas avoir une recette de cuisine :wink:

Dans l’exemple suivant, le second list n’est pas suivi de ‹ = › :D, l’un de vous peut-il décrire pas à pas le comportement de l’expression « while( cond ) ». Le contenu je m’en fou, je cherche à voir comment PHP se démerde.

while( list($key, list($k, $term, $tcount))=each($ar) )
{
if (empty($k)) continue;
echo « $term »;
echo $tcount;
echo «  »;
}

bon je remet un couche de bonne volonté en essayant d’etre plus pedagogue

while( list($key, $val) = each($_POST) )

l’expression While teste une valeur boolean pour fonctionner.
du type while (a

en fait tu te prends la tete a cause de list, list n’est pas vraiment une fonction (pas de valeur de retour et un = obligatoire derriere) c’est un « raccourci » qui te permets d’assigner plein de variable en meme temps.
c’est donc bien each qui est testé
alors OK ou KO ?

et use c’est pas grave t’as juste contribué a l’embrouille totale qui regne sur ce thread :smiley:

Oups pardon j’ai vraiment fumé moi…

Bon, oubliez ma remarque elle est complètement déplacée, je retourne me coucher moi… :casstet:

McGuffin> On ne se comprend pas, c’est clair (et pas la peine de t’énerver et merci pour le nombre de neurones que tu m’as attribué). J’essaie de décomposer et d’interpréter tel que PHP va le faire (pour comprendre la mécanique) mais là je ne vois pas.

Il est écrit dans la doc PHP que le while se comporte de la même manière qu’en C et que les expression sont évaluées de la droite vers la gauche (normal quoi :D) et bien avec ces deux règles je n’arrive pas à “éclater” le fameux while…

Engy> je suis d’accord, j’essaie juste d’éclater l’expression contenu dans le while

Usy> nope nope

[quote] while ( list($key, $val) = each($_POST) )[/quote]Un programmeur C lirait while ( list($key, $val) == each($_POST) ) (syntaxe foireuse, je le sais mais c’est juste pour l’idée).

[/quote]
y doit y avoir confusion personne ne lirait ca comme ca
c’est juste que list est une fonction un peu speciale de php

sinon Moktar tout ce qu’il a savoir c’est que
1 - qd each($_post) retourne FALSE on entre pas dans la boucle.
2 - qd il retourne autre chose (un tableau) , list permet de mettre le contenu du tableau dans des variables et on entre dans la boucle.

je precise a tout hasard que en aucun cas les variables $key et $val ne sont testé.

[quote]Allons, calme-toi McGuffin, on ne va pas se prendre la tête pour un problème d’algo (ego ?), non ?[/quote]bien sur… passez du temps a rendre service on vous le rendra…

[quote]engy> sauf que dans le cas cité, il y a deux variables alors quel opérateur a-t-on entre celles-ci ?

ex :

while( $a=1 $b=0) ??? ça fait bizarre non ?[/quote]
je comprends pas??!!?? de quel deux variables tu parle ??:::!!.?

et ca while( $a=1 $b=0) ca ne veut rien dire du tout.

[quote]while ( list($key, $val) = each($_POST) )[/quote]Un programmeur C lirait while ( list($key, $val) == each($_POST) ) (syntaxe foireuse, je le sais mais c’est juste pour l’idée).

[quote]dis donc mon grand si tu prefere te moquer betement de ceux qui essaye de rebrancher les deux neurones qui te restent, dis le tout de suite.[/quote]Allons, calme-toi McGuffin, on ne va pas se prendre la tête pour un problème d’algo (ego ?), non ? :smiley:

[Edité le 12/2/2003 par use-writer]

dis donc mon grand si tu prefere te moquer betement de ceux qui essaye de rebrancher les deux neurones qui te restent, dis le tout de suite.

regarde un peu mieux comment ca marche:

while ( list($key, $val) = each($_POST) )

ce qui est testé c’est (list($key, $val) = each($_POST)) ok?
c’est pas (list($key, $val))
tu vois mieux la?

je n’ai jamais dit que each affecte quoi que ce soit, mais renvoi une valeur de tableau qui est affecté a List().
une fois arrivé au bout du tableau il n’y a plus d’element a affecter, le while recoit un false et la boucle s’arrete.
j’espere que t’a compris parce que j’aime bien rendre service, mais y a des limites a la courtoisie.

hahahha :smiley:

ça tourne en rond.

McGuffin> « le each fait les deux » huhuhu, ce n’est pas each qui affecte d’ailleurs, mais l’opérateur =

engy> sauf que dans le cas cité, il y a deux variables alors quel opérateur a-t-on entre celles-ci ?

ex :

while( $a=1 $b=0) ??? ça fait bizarre non ?

[quote]le retour du each est utilisé pour l’affectation des variables bordel ! (dsl ) pas pour être testé comme condition du while[/quote]le each fait les deux…
le false est une reponse Null.
tant qu’il y a des valeurs dans le tableau le each renvoit les valeurs du tableau, puis deplace le pointeur de 1 (dans ce cas la reponse est necessaire TRUE puisque qu’il y a des valeur)
lorsque le each arrive en fin de tableau il renvoi False, et la boucle se termine.

peu importe imagine qu’on est

b=true;
while(a=;)
{
//trucmuche
}

c’est pareil que :
b=true;
while(:smiley:
{
a=b
//trucmuche
}

le retour du each est utilisé pour l’affectation des variables bordel ! (dsl ;)) pas pour être testé comme condition du while :casstet: :casstet: