2011-06-17 50 views
4

我有以下分贝表获取递归深度的每一行

enter image description here

82是84 24母体是82和83母体在PHP我具有由读取行的方法UID。

public function fetchByUid($uid){ 
    //code 
} 

这将检索表中的第7和第6个值。现在我不仅要获取uid相等的行,还要获取其父母是uid子项的行。例如。 82是84的父亲,但也是24的孩子。

所以我想出了一些递归。

public function fetchByUidRec($uid, $data, $counter){ 
    //set of rows by uid 
    $db_resultSet; 

    foreach($db_resultSet as $row){ 
     $entry = array(); 
     $entry['id'] = $row->id; 
     $entry['uid'] = $row->uid; 
     $entry['rid'] = $row->rid; 
     $entry['layer'] = $counter; 
     $data [] = $entry; 

     //now I want to do the same on the child 
     $data [] = fetchByUidRec($row->rid, $data, $counter = $counter + 1) 
    } 

    return $data; 
} 

public function getchByUid($uid){ 
    $data = array(); 
    $counter = 0; 

    return fetchByUidRec($uid, $data, $counter) 
} 

但是,这并不在所有的工作:(我想存储在$数据当前recrusion深度[“层”]

任何想法

回答

2

如果我理解正确你:

$rows = array 
(
    0 => array('id' => 8, 'uid' => 82, 'rid' => 84), 
    1 => array('id' => 7, 'uid' => 24, 'rid' => 82), 
    2 => array('id' => 6, 'uid' => 24, 'rid' => 83), 
); 

function fetchByUidRec($uid, $counter = 0) 
{ 
    global $rows; 

    // or in your case 
    // $rows = SELECT FROM table WHERE uid = $uid; 

    $data = array(); 

    foreach ($rows as $row) 
    { 
     if ($row['uid'] == $uid) 
     { 
      $data[] = array_merge($row, array('layer' => $counter)); 
      $data = array_merge($data, fetchByUidRec($row['rid'], $counter++)); 
     } 
    } 

    return $data; 
} 

echo '<pre>'; 
print_r(fetchByUidRec(24)); 
echo '</pre>'; 

输出

Array 
(
    [0] => Array 
     (
      [id] => 7 
      [uid] => 24 
      [rid] => 82 
      [layer] => 0 
     ) 

    [1] => Array 
     (
      [id] => 8 
      [uid] => 82 
      [rid] => 84 
      [layer] => 0 
     ) 

    [2] => Array 
     (
      [id] => 6 
      [uid] => 24 
      [rid] => 83 
      [layer] => 1 
     ) 
) 
+0

感谢,但你可以在我的代码见我不从表中检索整个行,但只有那些符合UID的是,这是由指示$ db_resultSet ....;对于父母的每个孩子,我现在再次为uid的所有孩子进行db查询(这将是第1层),等等...... – 2011-06-17 10:30:35

+0

@ArtWorkAD:这与您的问题无关,我想,我只是调整了您的代码以提供一个完全可行的例子。我建议你修正你的代码中的错别字和错误,也许还提供'fetchByUid' /'getchByUid'方法的代码。你的问题有点混乱。 – 2011-06-17 10:37:48

+0

@ArtWorkAD:在我的代码中查看评论,难道不是吗? – 2011-06-17 10:43:46