簡體   English   中英

PHP:遞歸數組函數

[英]PHP: Recursive array function

我想創建一個函數,它返回從集合節點返回到根值的完整路徑。 我試圖做一個遞歸函數,但完全失去了運氣。 什么是適當的方法來做到這一點? 我假設遞歸函數是唯一的方法嗎?

這是陣列:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Root category
            [_parent] => 
        )

    [1] => Array
        (
            [id] => 2
            [name] => Category 2
            [_parent] => 1
        )

    [2] => Array
        (
            [id] => 3
            [name] => Category 3
            [_parent] => 1
        )

    [3] => Array
        (
            [id] => 4
            [name] => Category 4
            [_parent] => 3
        )
)

結果我希望我的函數在獲取節點標識#4的完整路徑時輸出:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Root category
            [_parent] => 
        )

    [1] => Array
        (
            [id] => 3
            [name] => Category 3
            [_parent] => 1
        )

    [2] => Array
        (
            [id] => 4
            [name] => Category 4
            [_parent] => 3
        )
)

我遞歸技巧的臭名昭着的例子:

    function recursive ($id, $array) {

        $innerarray = array();
        foreach ($array as $k => $v) {

            if ($v['id'] === $id) {
                if ($v['_parent'] !== '') {
                    $innerarray[] = $v;
                    recursive($v['id'], $array);
                }
            }

        }
        return $innerarray; 
    }

假設你的子數組中的“id”是父數組中的子數組索引+ 1(否則你每次需要在數組中進行搜索),你可以這樣做:

$searchNode = 4;
while ($searchNode)
{
    $result[] = $nodes[$searchNode - 1];
    $searchNode = $nodes[$searchNode - 1]["id"];
}
$result = array_reverse($result);

暫無
暫無

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

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