簡體   English   中英

PHP:如何在每個foreach結果上運行foreach循環?

[英]PHP: How do I run foreach loop on every foreach result?

我從我的數據庫中提取內容並使用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 

我該怎么做?

您可以創建一個只返回具有特定父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中存儲分層數據,因為這是你在這里所做的。

在關系數據庫中存儲分層數據有哪些選項?

我自己想出了一個解決方案,就像我想要的那樣,但老實說我不知道​​是不是很糟糕的做法,但我對編程很新。

我做了一個函數,我可以傳入一個值。 在此函數中,我選擇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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM