la question que le me pose moi c'est :
pourquoi quand on rentre dans le foreach la position est a 1 et non pas a 0
$a = array('a', 'b', 'c', 'd');
foreach($a as $v)
{
var_dump(key($a));
}
/*
int 1
int 1
int 1
int 1
*/
du-coup en référence il part de 1
$a = array('a', 'b', 'c', 'd');
$b = &$a;
foreach($b as $v)
{
var_dump(key($b));
}
/*
int 1
int 2
int 3
null
*/
par contre en copie il par bien de 0
$a = array('a', 'b', 'c', 'd');
$b = $a;
foreach($b as $v)
{
var_dump(key($b));
}
/*
int 0
int 0
int 0
int 0
*/
EDIT : encore plus drôle, rien que le fait de le copié met le pointeur a 0;
$a = array('a', 'b', 'c', 'd');
$b = $a;
foreach($a as $v)
{
var_dump(key($a));
}
/*
int 0
int 0
int 0
int 0
*/
EDIT 2 : le simple fait de faire un foreach redéfinie la dernière variable du tableau
$a = array('a', 'b', 'c', 'd');
foreach($a as $v)
{
}
debug_zval_dump($a);
/*
array(4) refcount(2){
[0]=>
string(1) "a" refcount(1)
[1]=>
string(1) "b" refcount(1)
[2]=>
string(1) "c" refcount(1)
[3]=>
string(1) "d" refcount(2)
}
*/