3

重複の可能性:
関数は 1 回しか返さないのはなぜですか?

私のデータベース構造は次のようになります

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

パラメータとして id の親 (つまり、親 = 0) を取得する関数が必要です。たとえば、.. get_parent(6)== 1 を返します

この MySQL テーブルの行の「親 ID」を再帰的に取得するにはどうすればよいですか?

この関数を作ってみました

    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;
       }

で電話をかけます

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

しかし、私の方法は間違っています。どこで私は間違えましたか?

4

1 に答える 1

3

SQL クエリ内で親 ID を取得しようとしていますか、それとも PHP を使用していますか? そのために 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);
?>

コードはテストされておらず、単なるサンプルであることに注意してください。

于 2012-11-12T19:36:44.907 に答える