2013-10-09 2 views
0

Я хочу создать массив, используя рекурсию в Codeigniter. моя функция make_tree() в контроллере:Создание массива из рекурсивной функции в codeigniter

function make_tree($customer_id,$arr = array()){ 

    $ctree = $this->customer_operations->view_customer_tree($customer_id); 

    foreach($ctree as $v): 
     echo $customer_id = $v['customer_id']; 

     array_push($arr, $customer_id); 

     $this->make_tree($customer_id); 
    endforeach; 

    var_dump($arr); 

} 

Но выход var_dump($arr) и echo результатов как:

1013 

array 
    empty 

array 
    0 => string '13' (length=2) 

11 

array 
    empty 

array 
    0 => string '10' (length=2) 
    1 => string '11' (length=2) 

Как я могу сделать один массив из всех трех выходов, то есть массив с элементами 13,10,11

+1

Я бы сказал, попробуйте передать массив вашей функции по ссылке вместо значения, таким образом, он работает над одним и тем же массивом, а не создает новую рекурсию. в основном инициализируйте массив вне функции, затем измените параметр '$ arr = array()' на '& $ arr' – Bryan

+0

Спасибо .. Это помогло. Хотя в его выводах много массивов, я получаю желаемый результат в последнем массиве. – Nitish

+0

выводит тот же массив, что и при каждом запуске функции. И ты рад, рад, что это сработало! удалите дамп var в функции и просто выгрузите исходный массив после вызова функции. – Bryan

ответ

1

вам нужно отправить массив с параметрами, иначе будет создан новый массив.

function make_tree($customer_id,$arr = array()){ 

    $ctree = $this->customer_operations->view_customer_tree($customer_id); 

    foreach($ctree as $v): 
     echo $customer_id = $v['customer_id']; 

     array_push($arr, $customer_id); 

     $this->make_tree($customer_id, $arr); 
    endforeach; 

    var_dump($arr); 

} 

PS: Я не знаю, что вы пытаетесь сделать точно, но вы, вероятно, необходимо добавить условие останова, который собирается вернуть окончательный массив, если вы не хотите, чтобы передать его по ссылке.

UPDATE

Вот один из способов сделать это:

function make_tree($customer_id, &$arr) 
{ 
    $ctree = $this->customer_operations->view_customer_tree($customer_id); 

    foreach($ctree as $v): 
     $customer_id = $v['customer_id']; 

     array_push($arr, $customer_id); 

     $this->make_tree($customer_id, $arr); 
    endforeach; 
} 

и это, как вы будете использовать его:

$final_array = array(); 
make_tree($some_customer_id, $final_array); 
// now the $final_array is populated with the tree data 
+0

Если передать массив по ссылке '& $ arr = array()', он выводит (или возвращает, потому что я собираюсь вернуть массив) массив для каждого '$ customer_id'. Как я могу создать единый массив со всем '$ customer_id' в нем? Спасибо – Nitish

+0

Я добавил код в обновление. – redmoon7777

+1

дайте мне знать, если он работает (я не тестировал его) – redmoon7777

0

Вы можете использовать класс сферы.

class TheController { 

private $arr = array(); 

function make_tree($customer_id){ 

    $ctree = $this->customer_operations->view_customer_tree($customer_id); 

    foreach($ctree as $v) { 
     $customer_id = $v['customer_id']; 

     array_push($this->arr, $customer_id); 

     $this->make_tree($customer_id); 
    } 

} 

} 
Смежные вопросы