2013-03-13 3 views
0

의 배열을 반환하지 :PHP 함수 내가 아래 함수를 만든 PHP

<?php 
$cat_id=2; 
$ids=array(); 
$ids[]=2; 
var_dump(fetchParents($cat_id,$ids)); 
function fetchParents($cat_id,$ids){ 
    $db=mysql_connect("localhost","root","") or die("could not connect to database"); 
    mysql_select_db("symfony",$db) or die("could not connect to symfony database"); 
    $query="SELECT parent_id FROM categories WHERE id='$cat_id'"; 
    $result=mysql_query($query,$db); 
    if (mysql_num_rows($result)==1) { 
     $cat=mysql_fetch_array($result); 
     if (isset($cat['parent_id'])) { 
      $ids[]=$cat['parent_id']; 
      fetchParents($cat['parent_id'],$ids); 
     } 
     else { 
      var_dump($ids); 
      return $ids; 
     } 

    } 
    else { 
     return $ids; 
    } 
} 
?> 

이 함수는 배열을 반환해야하지만 난 널 얻고 나는 $ 확인 ID를 해요 것은 배열입니다. 또한 var_dump ($ ids) 배열을 반환하는 함수 내에서 사용하여 검사했습니다. 누군가 나를 도울 수 있습니까?

+0

입력 '$ ids'와 출력'$ ids'에 다른 이름을 사용하고 싶을 수도 있습니다. – Highmastdon

+0

또한 비용이 많이 드는 재귀를 필요로하지 않고 간단한 루프로 다시 작성할 수 있습니다. –

답변

3

기능을 종료하기 전에 return 문을 수행하지 않는 하나의 제어 흐름이 있습니다. 당신은 그렇지 않으면 그 선 후 함수가 return없이 종료

fetchParents($cat['parent_id'],$ids); 

return fetchParents($cat['parent_id'],$ids); 

에 변경해야합니다.

추가 :

루프로 변환하려면 :

function fetchParents($childId) 
{ 
    $ids = array(); 

    $db=mysql_connect("localhost","root","") or die("could not connect to database"); 
    mysql_select_db("symfony",$db) or die("could not connect to symfony database"); 

    while (true) 
    { 
     $res = mysql_query("SELECT parent_id FROM categories WHERE id=$childId"); 
     $row = mysql_fetch_assoc($res); 
     if (is_null($row['parent_id'])) 
      return $ids; 
     $ids[] = $row['parent_id']; 
     $childId = $row['parent_id']; 
    } 
} 

는 Btw는 - 나는 원래 예제에서 당신은 또한 너무 배열로 시작하는 요소의 ID를 추가하는 것을 알 수있다. 그렇다면, 그것은 훨씬 더 우아 할 수 다음 SELECT 쿼리에 행을 반환하지 않을 때이 두 사건을 처리하지 않는

function fetchParents($childId) 
{ 
    $ids = array(); 

    $db=mysql_connect("localhost","root","") or die("could not connect to database"); 
    mysql_select_db("symfony",$db) or die("could not connect to symfony database"); 

    while (!is_null($childId)) 
    { 
     $ids[] = $childId; 
     $res = mysql_query("SELECT parent_id FROM categories WHERE id=$childId"); 
     $row = mysql_fetch_assoc($res); 
     $childId = $row['parent_id']; 
    } 
    return $ids; 
} 

참고. 당신이 ID로 선택하기 때문에 그것이 일어나지 않을 것이라고 생각합니다. 그러나 가능성이 있다면 $row === false을 확인해야합니다. 그렇지 않으면 많은 경고/오류 메시지가 표시됩니다 (이 경우 PHP가 어떤 작업을 수행하는지 알 수 없습니다).

+0

아, 네, 감사합니다. 어떻게 그리워 했나요? – rockstar

+0

@PradipChitrakar - 루프로 다시 작성하십시오. 그것은 훨씬 더 간단 할 것이고, 따라서 엉망이되기가 더 어렵습니다. –

+0

어떻게 루프로이 작업을 수행 할 수 있습니까? 어떤 힌트. 나는 모든 부모님을 가져와야한다. – rockstar

0

두 개의 첫 번째 IF가 참이면 함수는 아무 것도 반환하지 않습니다.