foreach, рекурсия и глобальный массив

SiMM

Новичок
foreach, рекурсия и глобальный массив

Столкнулся со следующим необъяснимым для меня поведением PHP (4.3.9). Имею следующий кусок кода:
PHP:
$arr = array(array('id'=>1,'parent_id' => 0),
             array('id'=>2,'parent_id' => 1),
             array('id'=>3,'parent_id' => 0),
             array('id'=>4,'parent_id' => 2),
             array('id'=>5,'parent_id' => 1),
            );
rec();
Функция rec описана следующим образом
PHP:
function rec($id=0,$level=''){
  global $arr;
  foreach ($arr as $d)
    if ($d['parent_id'] == $id){
      echo $level.$d['id']."\n";
      rec($d['id'],'-'.$level);
    }
}
Результат выполнения:
Код:
1
-2
--4
Кто нибудь может объяснить причины? Для себя пока обошёлся "костылём"
PHP:
function rec($id=0,$level=''){
  global $arr;
  for ($i = 0; $i<count($arr);$i++){
    $d = $arr[$i];
    if ($d['parent_id'] == $id){
      echo $level.$d['id']."\n";
      rec($d['id'],'-'.$level);
    }
  }
}
который и выдаёт требуемые
Код:
1
-2
--4
-5
3
 

Мутник

Новичок
SiMM

Тут какой то бред с глобалсами, ибо такое корректно работает:

PHP:
function rec($arr, $id=0,$level=''){ 
  foreach ($arr as $d) 
    if ($d['parent_id'] == $id){ 
      echo $level.$d['id']."\n"; 
      rec($arr, $d['id'],'-'.$level); 
    } 
}

$arr = array(
            array('id'=>1,'parent_id' => 0), 
            array('id'=>2,'parent_id' => 1), 
            array('id'=>3,'parent_id' => 0), 
            array('id'=>4,'parent_id' => 2), 
            array('id'=>5,'parent_id' => 1), 
           ); 
rec($arr);
и выводит
 

SiMM

Новичок
neko, 10x
> это не баг
Даже если и фича - вещь достаточно неочевидная. ИМХО.
 
Сверху