首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHP数组作为索引路径

使用PHP数组作为索引路径
EN

Stack Overflow用户
提问于 2011-07-12 05:24:21
回答 2查看 413关注 0票数 3

我在平面PHP数组中有一个分层数组路径,例如:$path = array('fruit', 'banana', 'fresh');

我将我的多维数组定义为$tree。如何使用$path$tree中设置/获取适当的节点?$tree[$path] = 'blablabl';会抛出一个“非法偏移错误”。我不确定如何将字符串的路径内爆()并使用eval()来获取索引。做这件事最直接的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-14 04:31:52

我用引用解决了同样的问题:

代码语言:javascript
复制
function &walk_path(array &$root, array $path)
{
    $cursor = &$root;
    foreach ($path as $e) { $cursor = &$cursor[$e]; }
    return $cursor;
}

$db = [];
$tmp = &walk_path($db, ["users","deanna", "favourite food"]);
$tmp = "chocolate";
print_r($db);

将产生

代码语言:javascript
复制
Array
(
    [users] => Array
        (
            [deanna] => Array
                (
                    [favourite food] => chocolate
                )

        )

)

注意,由于PHP,这将创建任何不存在的键,或者作为一个数组,其中唯一的键是autovivicates中的下一个元素,或者如果它是叶节点,则为null。幸运的是,这正是我需要的行为。然而,我仍然感到有点相似,因为我必须自己用一种专注于它的数组的语言来编写这个函数。任何使这篇文章简短的建议都是受欢迎的。

票数 2
EN

Stack Overflow用户

发布于 2011-07-12 05:25:58

因为数组是数组,而PHP不知道任何关于树的东西,所以您必须自己解析多维数组的路径,但这并不难。

迭代

代码语言:javascript
复制
$result = $tree;
foreach ($path as $step) {
  $result = $result[$step];
}

或递归

代码语言:javascript
复制
function resolve_tree ($tree, $path) {
  return empty($path)
         ? $tree
         : resolve_tree ($tree[$path[0]], array_slice($path, 1));
}

请注意,这是最简单的解决方案。例如,在您尝试访问它之前,您应该注意来自$path的给定密钥是否存在。

更新:我忽略了问题中的"set"-part。没有引用并不好笑,因此我建议完全切换到对象而不是数组。创建一个类并不是必需的。您可以简单地使用stdClass。这甚至会让人感觉有点“树”的感觉。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6656770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档