如何在PHP的数组树中使用字符串?

时间:2019-09-02 04:12:23

标签: php arrays tree

我正在用PHP获取值的路径,但不确定如何将数组与字符串路径组合在一起?下面给了我一个价值。

var_dump($array['boo']['far'][0]); // works

尽管这些都不给我有效(甚至是有效的PHP)。

$path = "['boo']['far'][0]";
var_dump($array.$path); // doesn't work
var_dump($array{$path}); // doesn't work
var_dump(eval($array.$path)); // doesn't work

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果路径的字符串组成部分非常简单,则可以使用preg_match_all将路径解析为组成部分,然后递归遍历数组的各个级别以找到所需的元素:

$array['boo']['far'][0] = "hello world!\n";
$path = "['boo']['far'][0]";

preg_match_all("/\['?([^\]']+)'?\]/", $path, $matches);
$v = $array;
foreach ($matches[1] as $p) {
    $v = $v[$p];
}
echo $v;

输出:

hello world!

Demo on 3v4l.org

除此之外,您唯一真正的选择是eval。您可以使用eval来回显值,或将其分配给另一个变量。例如,

$array['boo']['far'][0] = "hello world!\n";
$path = "['boo']['far'][0]";
eval("echo \$array$path;");
eval("\$x = \$array$path;");
echo $x;
$y = eval("return \$array$path;");
echo $y;

输出:

hello world!
hello world!
hello world!

Demo on 3v4l.org

答案 1 :(得分:0)

您有一个数组

根据您要执行的操作,可以将字符串添加为第一个索引的 part

$result = $array['boo']['far'][0] . $path;

推入数组的下一个索引:

array_push($array['boo']['far'], $path);