1

例子:

$arr = array(array("name"=>"Bob","species"=>"human","children"=>array(array("name"=>"Alice","age"=>10),array("name"=>"Jane","age"=>13)),array("name"=>"Sparky","species"=>"dog")));
print_r($arr);

array_walk_recursive($arr, function($v,$k) {
    echo "key: $k\n";
});

这里的问题是我只得到最后一个键,但我无法参考我所在的位置,即存储一个特定的键并在我离开函数后更改值或在另一个相同的数组中更改相同的放置值。

我必须得到的不是字符串,而是一个数组,它的所有键都会导致给定值,例如[0,"children",1,"age"].

编辑:这个数组只是例子。我问过是否有通用的方法可以在 PHP 中迭代嵌套数组并获得完整的位置路径,而不仅仅是最后一个键。而且我知道有一种方法可以通过创建反映数组结构的嵌套循环来做到这一点。但我再说一遍:我事先并不知道数组结构。

4

1 回答 1

2

要解决您的问题,您将需要递归。下面的代码会做你想做的事,如果它们存在,它也会找到多个路径:

$arr = array(
    array(
        "name"=>"Bob",
        "species"=>"human",
        "children"=>array(
            array(
                "name"=>"Alice",
                "age"=>10
            ),
            array(
                "name"=>"Jane",
                "age"=>13
            )
        ),
        array(
            "name"=>"Sparky",
            "species"=>"dog"
        )
    )
);

function getPaths($array, $search, &$paths, $currentPath = array()) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $currentPath[] = $key;
            if (true !== getPaths($value, $search, $paths, $currentPath)) {
                array_pop($currentPath);
            }
        } else {
            if ($search == $value) {
                $currentPath[] = $key;
                $paths[] = $currentPath;
                return true;
            }
        }
    }
}

$paths = array();
getPaths($arr, 13, $paths);
print_r($paths);
于 2012-11-14T10:34:05.273 回答