Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:遍历数组? 我想要一个函数 在我的数组中搜索,然后 返回所有 子节点到特定节点。是什么 最合适的方法是什么? 在这种情况下需要递归吗?_Php_Arrays_Recursion_Multidimensional Array - Fatal编程技术网

PHP:遍历数组? 我想要一个函数 在我的数组中搜索,然后 返回所有 子节点到特定节点。是什么 最合适的方法是什么? 在这种情况下需要递归吗?

PHP:遍历数组? 我想要一个函数 在我的数组中搜索,然后 返回所有 子节点到特定节点。是什么 最合适的方法是什么? 在这种情况下需要递归吗?,php,arrays,recursion,multidimensional-array,Php,Arrays,Recursion,Multidimensional Array,我以前构造过一些非常复杂的函数,它们通过多维数组进行递归迭代或不通过递归进行迭代,并重新排列它们,但这个问题让我完全陷入困境,我无法完全理解它 这是我的阵列: Array ( [1] => Array ( [id] => 1 [parent] => 0 ) [2] => Array ( [id] => 2 [parent] =>

我以前构造过一些非常复杂的函数,它们通过多维数组进行递归迭代或不通过递归进行迭代,并重新排列它们,但这个问题让我完全陷入困境,我无法完全理解它

这是我的阵列:

Array
(
    [1] => Array (
            [id] => 1
            [parent] => 0

        )

    [2] => Array (
            [id] => 2
            [parent] => 1
        )

    [3] => Array (
            [id] => 3
            [parent] => 2
        )
)
更新:

我想要得到的输出。对于这个糟糕的例子,我很抱歉,但我会将其归咎于缺乏关于如何格式化我需要做的东西的知识:

function getAllChildren($id) {
    // Psuedocode
    return $array;
}

getAllChildren(1); // Outputs the following:

Array
(
    [2] => Array (
            [id] => 2
            [parent] => 1
        )

    [3] => Array (
            [id] => 3
            [parent] => 2
        )
)
查看PHP中的array\u walk\u递归函数:

查看PHP中的array\u walk\u递归函数:

假定父节点/子节点的顺序,因此子节点不包括在数组中,除非父节点已经存在


假定父节点/子节点的顺序,因此子节点不包括在数组中,除非父节点已经存在

您好,谢谢!恐怕你误解了我的意思。我需要一个特定idI的子节点,我不明白。你能提供一个例子吗?更新的原始帖子。谢谢你的关注:嗨,谢谢!恐怕你误解了我的意思。我需要一个特定idI的子节点,我不明白。你能提供一个例子吗?更新的原始帖子。谢谢你的关注:嗨,马克!谢谢你的帮助!您将如何修改它以处理查找多级子节点的问题?为了解释,如果我在顶部节点上对示例中的数组运行函数,我希望将节点2和3都返回,因为它们都是顶部节点的子节点,但处于多个级别。您好,马克,非常感谢您的更新。它就像一个符咒!它使用与我的代码中所示相同的初始数组生成与第一个递归函数相同的结果,但如果在数组中定义了子函数,则不会返回正确的结果parent@Industrial我已经撤职了。虽然您可以使用SPL来实现,但它确实使您的用例变得过于复杂。马克的解决方案很好。保持简单。嗨,马克!谢谢你的帮助!您将如何修改它以处理查找多级子节点的问题?为了解释,如果我在顶部节点上对示例中的数组运行函数,我希望将节点2和3都返回,因为它们都是顶部节点的子节点,但处于多个级别。您好,马克,非常感谢您的更新。它就像一个符咒!它使用与我的代码中所示相同的初始数组生成与第一个递归函数相同的结果,但如果在数组中定义了子函数,则不会返回正确的结果parent@Industrial我已经撤职了。虽然您可以使用SPL来实现,但它确实使您的用例变得过于复杂。马克的解决方案很好。保持简单。
<?php
function searchItem($needle)
{
    foreach ($data as $key => $item)
    {
        if ($item['id'] == $needle)
        {
            return $key;
        }
    }
    return null;
}
?>
$nodes = array( 1   => array (  'id'        => 1,
                                'parent'    => 0
                             ),
                2   => array ( 'id'         => 2,
                               'parent'     => 1
                             ),
                3   => array ( 'id'         => 3,
                               'parent'     => 2
                             )
                );


function searchItem($needle,$haystack) {
    $nodes = array();
    foreach ($haystack as $key => $item) {
        if ($item['parent'] == $needle) {
            $nodes[$key] = $item;
            $nodes = $nodes + searchItem($item['id'],$haystack);
        }
    }
    return $nodes;
}


$result = searchItem('1',$nodes);
echo '<pre>';
var_dump($result);
echo '</pre>';
function searchItem($needle,$haystack) {
    $nodes = array();
    foreach ($haystack as $key => $item) {
        if (($item['parent'] == $needle) || array_key_exists($item['parent'],$nodes)) {
            $nodes[$key] = $item;
        }
    }
    return $nodes;
}