Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mais qu'est ce qu'ils nous ont fait?

13 réponses
Avatar
Etienne SOBOLE
Salut.

suis je seul a avoir remarqué que la version
4.3.10 du php gére différement le foreach ?

$arr = array('a' => 'test');
foreach($arr as $value)
{
print_r($value);
}

dans ce cas, $value ne vaut pas 'test', mais un tableau a deux entrées [0] =
'a' et [1] = 'test'

C'est quoi ce bordel?
je suis passé de la version 4.3.1 a la 4.3.10 (et maintenant 4.3.11)
a partir de quand est ce que je comportement a changé?

Etienne

10 réponses

1 2
Avatar
ftc
Salut.

suis je seul a avoir remarqué que la version
4.3.10 du php gére différement le foreach ?

$arr = array('a' => 'test');
foreach($arr as $value)
{
print_r($value);
}

dans ce cas, $value ne vaut pas 'test', mais un tableau a deux entrées [0] =
'a' et [1] = 'test'


Pour moi, c'est le comportement normal. Pour avoir 'test' dans $value,
il faut faire:

foreach( $arr as $key=>$value ) {
print_r( $value );
}

Avatar
CrazyCat
Etienne SOBOLE wrote:
suis je seul a avoir remarqué que la version
4.3.10 du php gére différement le foreach ?
$arr = array('a' => 'test');
foreach($arr as $value)
{
print_r($value);
}
dans ce cas, $value ne vaut pas 'test', mais un tableau a deux entrées [0] =
'a' et [1] = 'test'
C'est quoi ce bordel?


Aucune idée de la version qui a pu provoquer ce changement car je ne
l'ai jamais constaté.
Pour ma part, si ma variable est un tableau, j'utilise:
foreach ($arr as $key => $value) {
$$key = $value
print_r($key);
}

Cela me semble bien plus logique, ton utilisation étant plutot à
réserver pour des définitions du type:
$arr = array('a', 'test');

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net

Avatar
Vincent Lascaux
Pour moi, c'est le comportement normal. Pour avoir 'test' dans $value, il
faut faire:

foreach( $arr as $key=>$value ) {
print_r( $value );
}


array('a', 'b') est équivalent à array(0 => 'a', 1 => 'b');
Que devrait afficher le programme suivant:

$arr = array('a', 'b');
foreach($arr as $v)
print_r( $arr );

?
--
Vincent

Avatar
ftc
Pour moi, c'est le comportement normal. Pour avoir 'test' dans $value, il
faut faire:

foreach( $arr as $key=>$value ) {
print_r( $value );
}



array('a', 'b') est équivalent à array(0 => 'a', 1 => 'b');
Que devrait afficher le programme suivant:

$arr = array('a', 'b');
foreach($arr as $v)
print_r( $arr );

?


Ce n'est pas plutôt print_r( $v ) qui affiche en toute conséquence 'ab'.

Par contre, je me suis trompé en effet, le comportement habituel de
$arr = array('a' => 'test');
foreach($arr as $value)
{
print_r($value);
}

est bien de ramener 'test'. D'ailleurs chez moi avec PHP 4.3.10, c'est
bien ce qu'il fait.

Bien qu'il ne me semble pas logique d'utiliser cette structure en
contexte de dictionnaire.

Par contre, rien n'est indiqué dans la doc sur l'utilisation de
"foreach( $arr as $value )" dans un contexte de dictionnaire.


Avatar
P'tit Marcel
Etienne SOBOLE wrote:
suis je seul a avoir remarqué que la version
4.3.10 du php gére différement le foreach ?

$arr = array('a' => 'test');
foreach($arr as $value)
print_r($value);

dans ce cas, $value ne vaut pas 'test', mais un tableau a deux entrées [0] =
'a' et [1] = 'test'


Vérifie que ton installation de php n'inclut pas "Zend Optimizer, Zend
Debugger, Turck MM Cache, APC, Xdebug ou ionCube loader".

Avatar
Etienne SOBOLE
Par contre, je me suis trompé en effet, le comportement habituel de
$arr = array('a' => 'test');
foreach($arr as $value)
{
print_r($value);
}

est bien de ramener 'test'. D'ailleurs chez moi avec PHP 4.3.10, c'est
bien ce qu'il fait.


whoo whoo whoo
qu'est ce que tu me dis là???

chez moi ca me retourne un tableau à deux entrées...
T'es sur que tu utilises bien le php 4.3.10 ???

si tel est le cas y a une soucis.
soit ça se règle dans le php.ini, soit en fonction des versions.
moi je suis sous linux.

Etienne

Avatar
Etienne SOBOLE
Vérifie que ton installation de php n'inclut pas "Zend Optimizer, Zend
Debugger, Turck MM Cache, APC, Xdebug ou ionCube loader".


drole de remarque.
moi j'utilise effectivement ioncube loader...

le bug viendrait de la?

Etienne

Avatar
P'tit Marcel
Etienne SOBOLE wrote:

Vérifie que ton installation de php n'inclut pas "Zend Optimizer, Zend
Debugger, Turck MM Cache, APC, Xdebug ou ionCube loader".


drole de remarque.
moi j'utilise effectivement ioncube loader...

le bug viendrait de la?


moi je n'affirme rien, je cite juste :

http://minilien.com/?yqtiKD3lHf

L'incident a été signalé 9 fois et 9 fois la réponse a été la même :
pas un pb causé par php mais par une extension genre Zend ou autre

--
P'tit Marcel


Avatar
Etienne SOBOLE
moi je n'affirme rien, je cite juste :
http://minilien.com/?yqtiKD3lHf


Ah ben merci.
vaut mieux le savoir en effet...

du coup ca limite quelques peu l'interet des optimizer de code !
Etienne

Avatar
Etienne SOBOLE
salut.

non ben pour finir, et pour ceux qui utilisent ioncube loader,
et bien il existe une version du decoder (et non de l'encoder) qui corrige
le probleme.

voila.
finalement on oubli mon idée de modifier tous mes scripts ;)
ce qui, soit dit en passant allait être un boulot titanesque ;)

Merci
Etienne
1 2