我正在用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
有什么想法吗?
答案 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!
除此之外,您唯一真正的选择是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!
答案 1 :(得分:0)
您有一个数组。
根据您要执行的操作,可以将字符串添加为第一个索引的 part :
$result = $array['boo']['far'][0] . $path;
或将推入数组的下一个索引:
array_push($array['boo']['far'], $path);