PHP: Recursive dizi fonksiyonu

1 Cevap php

Ben geri kök değeri için, bir dizi düğümden tam yolunu döndüren bir işlev oluşturmak istiyorum. Ben bir özyinelemeli işlev yapmaya çalıştım, ama tamamen şans bitti. Bu ne için uygun bir yol olurdu? Ben bir özyinelemeli işlev tek yolu olduğunu varsayıyorum?

İşte dizi var:

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
        )
)

Düğüm id # 4 tam yolunu alırken Sonuç Ben çıktı benim işlevi istiyorum:

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
        )
)

Benim özyinelemeli beceri herkesin bildiği kötü örnek:

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

1 Cevap

senin alt dizideki "id" varsayarak ana dizinin içindeki + 1 alt diziler indeksi (aksi takdirde dizide her zaman bir arama yapmak gerekir) olduğunu, bunu yapabilirsiniz:

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