2013-08-20 3 views
0

так, это странно, у меня есть этот метод, называемый treetrunk, который запускает родительское дочернее отношение и должен возвращать массив, если ids как «branchPath» - метод кажется чтобы работать просто отлично, так как var_dump в моем завершающем состоянии показывает правильный массив. Однако, если я пытаюсь вызвать метод возвращаемого массива является "NULL" - я действительно не понимаю ..php codeigniter - var_dump показывает массив, но возвращает null

метод

Модели:

function treeTrunk($id){//1st id in is page id 
    if($id == '0'){ 
     var_dump($this->branchPath); //this shows perfect array 
     return $this->branchPath; //this returns null 
    } 
    else{ 
     $q = $this->getWhere(array('id'=>$id),null,null); 
     array_push($this->branchPath, $q[0]['pageParent']); 
     $this->treeTrunk($q[0]['pageParent']); 
    }  
} 

Вызов с помощью контроллера:

$d = $this->pages_mdl->treeTrunk('150'); 
var_dump($d); // <- this == NULL 

var_dump от (3) «148» [1] => строка (3) «146» [2] => строка (1) «0»} «

+0

Разве это не просто возвращает нуль, потому что вы посылаете в «150», а если оператор ищет «0»? Таким образом, ничего не возвращается. Что делает остальная часть, называть себя рекурсивно? Получает ли что-нибудь что-нибудь возвращенное? – StickMaNX

ответ

1

Вы ничего не дадите в разделе else.

else{ 
    $q = $this->getWhere(array('id'=>$id),null,null); 
    array_push($this->branchPath, $q[0]['pageParent']); 
    $this->treeTrunk($q[0]['pageParent']); 
} 

должен быть

else{ 
    $q = $this->getWhere(array('id'=>$id),null,null); 
    array_push($this->branchPath, $q[0]['pageParent']); 
    return $this->treeTrunk($q[0]['pageParent']); 
} 

Как писал в вас вопрос вы передаете 150 к treeTrunk() функции, поэтому она идет еще часть и дает null результат. Часть if будет оценивать, когда вы пройдете 0 до treeTrunk().

+0

«getWhere» получает родительский идентификатор id - он получает «0», когда он достигает страницы верхнего уровня. Однако возвращать рекурсивный вызов. Я возьму это. – user1284897

0

Это должно быть NULL

else{ 
    $q = $this->getWhere(array('id'=>$id),null,null); 
    array_push($this->branchPath, $q[0]['pageParent']); 
    $this->treeTrunk($q[0]['pageParent']); // You have to return this value as well 
} 

Когда вы не return, что массив, что еще вы ожидаете, чтобы отправить обратно? добавьте там заявление return. Когда вы имеете дело с рекурсией, ваш последний вызов вернул значение вашему второму последнему вызову, но вызвал ли этот вызов его первоначальный вызов? поэтому добавьте return там

return $this->treeTrunk($q[0]['pageParent']); 

А также убрать кавычки вокруг целочисленных значений, не только это выглядит плохо, он иногда перестает работать, как ожидалось в PHP тогда.

Demo

+0

Блестящий! ~ хотя я все еще не могу окутать голову, почему дамп var дал мне то, что я искал, но не возвращение ... Я также не знал, что вы можете вернуть еще один вызов методу - +1 для обучения меня чему-то новому ! – user1284897

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