|
|
|
| Здравствуйте! Помогите пожалуйста решить задачу. Есть многомерный массив с неизвестным уровнем вложенности. Нужно преобразовать этот массив в одномерный с указанием уровня вложенности. У меня получается получить только первый уровень вложенности в результат, хотя когда скрипт выполняется я вижу, что он выполняется вроде бы правильно так как я и хотел, но вот возвращает только первый уровень вложенности.
<?php
$users = array(
'a1'=>'value a1',
'a2'=> array(
'b1'=>array(
'c1'=>'value c1',
'c2'=>'value c2',
'c3'=> array(
'd1'=>'value d1'
)
),
'b2'=>'value b2'
),
'a3'=> array(
'b3'=>'value b3',
'b4'=>'value b4'
),
);
$array = array();
$generation = 0;
$i = 0;
function recursion($users, $generation, $array, $i){
$generation++;
echo 'F'; // start function
foreach ($users as $key => $value) {
echo 'I'; // iteration start
$array[$i]['content']= $key.'=>'.$value;
$array[$i]['generation'] = $generation;
$i++;
if(is_array($value)){
recursion($value, $generation, $array, $i);
}
}
return $array;
}
$result = recursion($users, $generation, $array, $i);
print_r($result);
?>
|
| |
|
|
|
|
|
|
|
для: Tobur
(07.08.2010 в 22:02)
| | массивы в php передаются по значению, не по ссылке.
(Более точно, конечно, сказать, что они передаются по записи на копии, то есть по копирующей ссылке. Но это Вас, наверное, только запутает. Считайте, что они передаются по значению, если не указано обратное.)
Соответственно, на каждом уровне рекурсии (dthytt на каждом вызове) скрипт пытается писать в отдельную, независимую копию массива $array | |
|
|
|
|
|
|
|
для: Trianon
(07.08.2010 в 22:10)
| | Спасибо за ответ, поправил заработало. Я думал, что я массив перезаписываю, а как и где не мог понять. | |
|
|
|