2012-11-12 56 views
1

可能重複:
function returning only once, why?如何從子ID獲取父ID(根父)

我的數據庫結構看起來像

id|parent| 
1 | 0 | 
2 | 0 | 
3 | 0 | 
4 | 1 | 
5 | 4 | 
6 | 5 | 

我需要的一個函數獲取一個id的父(即父= 0)作爲參數 對於例如.. get_parent(6)==返回1 我做了一些研究,並通過

$fnd=get_parent_id(); 
$array_reverse($fnd); 
$parent_root=$fnd['0']; 

發現這個問題

How can I recursively obtain the "parent ID" of rows in this MySQL table?

我試圖使這一功能

function get_parent_id($cid,$found=array()) 
    { 
    array_push($found,$cid); 
    $sql="SELECT * FROM tbl_destinations WHERE id=$cid"; 
    $result = mysql_query($sql) or die ($sql); 
    if(mysql_num_rows($result)) 
    { 

     while($row = mysql_fetch_assoc($result)) 
     { 
     $found[] = get_parent_id($row['parent'], $found); 
     } 
    } 
return $found; 
     } 

我打個電話,但我的方法是錯誤的。我哪裏做錯了?

+2

你真的不應該*雙*後。你應該確保你收到你原來問題的答案。即使如此,也可以使用 –

+0

。除非告訴我規則和規定,否則任何人都可以提供答案,我會很高興。對不起,我粗魯..我需要這個問題的答案拼命 –

+0

請嘗試瞭解http://de.slideshare.net/billkarwin/models-for-hierarchical-data – Varon

回答

3

您是否試圖在SQL查詢或使用PHP中獲取父ID?如果你正在尋找使用PHP的話,你可以假設你從數據庫中獲取信息到數組中,然後執行$arr[6]['parent']。或者,你可以有一個功能:

<?php 
//Let's assume you have your data from the database as such 
$arr = array(
    array('id' => 1, 'parent' => 0), 
    array('id' => 2, 'parent' => 0), 
    array('id' => 3, 'parent' => 0), 
    array('id' => 4, 'parent' => 1), 
    array('id' => 5, 'parent' => 4), 
    array('id' => 6, 'parent' => 5)); 

function get_key($arr, $id) 
{ 
    foreach ($arr as $key => $val) { 
     if ($val['id'] === $id) { 
      return $key; 
     } 
    } 
    return null; 
} 

function get_parent($arr, $id) 
{ 
    $key = get_key($arr, $id); 
    if ($arr[$key]['parent'] == 0) 
    { 
     return $id; 
    } 
    else 
    { 
     return get_parent($arr, $arr[$key]['parent']); 
    } 
} 

echo get_parent($arr, 6); 
?> 

請注意,該代碼是未經測試,只是一個示例。

+0

他想要「根」父級。所以不是直接的父母。您需要遞歸直到獲得$ arr [$ id] ['parent'] = 0,然後返回$ id; – MikeMurko

+0

雅我想根父。和@mikeMurko我正在努力做到這一點。如果我這樣做,我會在這裏回答我的答案。我幾乎很難得到答案。但是被樹層次感到困惑 –

+0

噢好吧,這樣做很有道理,那麼我已經更新了我的答案,以證明你在找什麼。我已經測試並驗證它按預期工作。 – jmgardn2