PHP:如何在每个foreach结果上运行foreach循环?

时间:2017-01-29 11:50:51

标签: php foreach

我从数据库中提取内容并使用foreach循环运行它。我拉的每个项目都有一个带有ID的列,以及一个带有PARRENT ID的列(以及其他列)。 首先,我拉出我的PARRENT ID列等于0的所有行,并通过我的foreach循环输出它们,但是对于我得到的每个结果,我想运行一个新查询来检查PARRENT ID等于其ID的行。对于我来到这里的每一个结果,我想一次又一次地做同样的事情,因为它可能会找到许多结果(可能这可能永远存在)。

让我试着想象一下这个

ID = 1, PARRENT ID = 0
ID = 2, PARRENT ID = 0
ID = 3, PARRENT ID = 0
   ID = 4, PARRENT ID = 3
   ID = 5, PARRENT ID = 3
      ID = 6, PARRENT ID = 5
    ID = 7, PARRENT ID = 3
    ID = 8, PARRENT ID = 3
ID = 9, PARRENT ID = 0
ID = 10, PARRENT ID = 0
   ID = 11, PARRENT ID = 10
      ID = 12, PARRENT ID = 11
         ID = 13, PARRENT ID = 12
            ID = 14, PARRENT ID 13

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以创建一个只返回具有特定父ID的所有行的函数。然后创建一个递归函数,打印出结果集和每个元素的所有子元素。这是一些快速伪代码:

function getRowsForParentId($id){
    //build query with "WHERE parent = id", fetch all rows and return them
    ...
    return $rows;
}


function printResults($results, $level = 1){
    //loop over every result
    foreach($results as $row){
        //print an indented representation of that row
        echo sprintf("%sid: %s, parent: %s", str_repeat(" ", $level), $row->id, $row->parentId);
        //print out all childs one level deeper
        printResults(getRowsForParentId($row->id), $level++);
    }
}

$allRows = getRowsForParentId(0);//fetch all rows from db where parent = 0
printResults($allRows);

这应该做你想要的。

另外请查看在mysql中存储分层数据,因为这就是你在这里所做的。

What are the options for storing hierarchical data in a relational database?

答案 1 :(得分:0)

我自己想出了一个解决方案,它的工作方式与我想要的一样,但老实说我不知道​​这是不好的做法,但我对编程很新。

我创建了一个函数,我可以在其中传入一个值。 在此函数中,我选择PARRENT ID等于我的输入值的所有行。 然后我有一个foreach循环,在其中我获得了earch行的ID。 在这个foreach循环中,我传递函数,并将ID作为值传递。

function get_parrents($input) {  

$sql = "SELECT * FROM table WHERE parrent_id = '" . $input . "'";
$result = mysqli_query($conn, $sql);
foreach($result as $item) {

    $new_item = $item['id'];

    get_parrents($new_item);
};

};

$ a = 0;

catch_replies($ a)的