我们可以在多维数组中以动态方式获得任何键吗?
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
internalLogToConsole="true">
例如,如果我想到达Kitchen1&#39;和&#39;菜肴&#39;和&#39; Iron&#39;分别。
$f['Kitchen']['Dishes']['Mantovarka']=3;
$f['Kitchen']['Dishes']['Castrool']=91;
$f['Kitchen']['Dishes']['Separator']=10;
$f['Kitchen']['Product']=18;
$f['Kitchen']['Textile']=19;
$f['Kitchen']['Blue things']['Juicemaker']=25;
$f['Kitchen']['Blue things']['Freegener']=13;
$f['Kitchen1']['Blue things One']['Microwave']=4;
$f['Kitchen1']['Blue things One']['Iron']=24;
$f['Kitchen1']['Dishes One']['Separator']=110;
我试图将其作为:
var_dump($f['Kitchen1']);
Output:
[
'Blue things One' => [
'Microwave' => 4
'Iron' => 24
]
'Dishes One' => [
'Separator' => 110
]
]
var_dump($f['Kitchen']['Dishes']);
Output:
[
'Mantovarka' => 3
'Castrool' => 91
'Separator' => 10
]
var_dump($f['Kitchen1']['Blue things']['Iron']);
Output:
24
我们可以动态地为$ kitchenKeys或/和$ dishKeys或/和$ ironKeys分配键,以获取多维数组中的任何键值吗?
答案 0 :(得分:1)
Chay22是正确的,基于this
这将有效;eval('var_dump($f['.$dishKeys.']);');
你也可以把它变成像这样的可用变量
eval('$newkey = ($f['.$dishKeys.']);');
var_dump($newkey);
答案 1 :(得分:0)
或者,您可以使用函数来使用点表示法访问内部键。例如&#34; key1.key2.key3&#34;。可以在此处找到此类示例:https://github.com/rappasoft/laravel-helpers/blob/master/src/helpers.php
但是上面描述的eval方法也可以。但是,由于未设置密钥,您更容易出错,如果您从用户输入设置动态密钥,则清理会成为问题。
答案 2 :(得分:0)
我认为我动态地执行它的方式是获取值的数组,然后在foreach内部(如果你不止一次使用它,我会做一个函数内部)为了显示而生成)为数组的元素生成一个字符串。然后设置一个包含要运行的命令的字符串,最后使用eval()
执行它。请注意这些数组将包含的内容,特别是如果它是用户生成的,因为eval()
可能是危险的。
$dishKeysArray = array("Kitchen", "Dishes");
$evalString = getEvalString($dishKeysArray);
eval($evalString);
function getEvalString($array){
$elementString = "";
foreach($array as $arr){
$elementString .= "['$arr']";
}
$evalString = 'var_dump($f' . $elementString . ');';
return $evalString;
}
希望这有帮助。
注意double&amp;的具体用法。单引号,因为有时我们想要实际使用数组的值,有时我们想要输出数组名称($f
)