我试图执行变量,哪一部分是字符串。
这是:
$row = array(
'index_1' => array(
'index_2' => 'my-value'
)
);
$pattern = "['index_1']['index_2']";
我试图通过以下方式实现:
// #1
$myValue = $row{$pattern};
// #2
$myValue = eval("$row$pattern");
我也尝试使用变量变量,但不成功。
任何提示,我该怎么做?或者myabe还有其他方式。我不知道怎么看阵列,但我只有关键索引的名称(由用户提供),这是:index_1
,index_2
答案 0 :(得分:0)
您可以使用eval
,但由于您说这些值来自用户输入,因此风险很大。在这种情况下,最好的方法可能是解析字符串并提取密钥。这样的事情应该有效:
$pattern = "['index_1']['index_2']";
preg_match('/\[\'(.*)\'\]\[\'(.*)\'\]/', $pattern, $matches);
if (count($matches) === 3) {
$v = $row[$matches[1]][$matches[2]];
var_dump($v);
} else {
echo 'Not found';
}
答案 1 :(得分:0)
这可以提供帮助 -
$row = array(
'index_1' => array(
'index_2' => 'my-value'
)
);
$pattern = "['index_1']['index_2']";
$pattern = explode("']['", $pattern); // extract the keys
foreach($pattern as $key) {
$key = str_replace(array("['", "']"), '', $key); // remove []s
if (isset($row[$key])) { // check if exists
$row = $row[$key]; // store the value
}
}
var_dump($row);
如果进一步使用,则需要将$row
存储在临时变量中。
<强>输出强>
string(8) "my-value"
答案 2 :(得分:0)
如果您总是收到两个索引,那么解决方案非常简单,
$index_1 = 'index_1';// set user input for index 1 here
$index_2 = 'index_2';// set user input for index 2 here
if (isset($row[$index_1][$index_2])) {
$myValue = $row[$index_1][$index_2];
} else {
// you can handle indexes that don't exist here....
}
如果提交的索引总是不成对,那么就可以了,但我需要更新我的答案。
答案 3 :(得分:0)
因为eval不安全,只有当你知道自己在做什么时才会这样。 $ myValue = eval(“$ row $ pattern”);将您想要的值分配给$ myValue,您可以添加use return以使eval返回您想要的值。 这是使用eval的代码,谨慎使用它。 demo here.
<?php
$row = array(
'index_1' => array(
'index_2' => 'my-value'
)
);
$pattern = 'return $row[\'index_1\'][\'index_2\'];';
$myValue = eval($pattern);
echo $myValue;