假如我知道数组中某一个元素的路径,我怎么取到这个元素的值?
下面这段代码报错,该怎么解决?大家有没有好的办法?
$m=['a'=>['b'=>['c'=>'@@@@@']]];$x='a.b.c';$y=str_replace('.','\'][\'',$x);$y='m[\''.$y.'\']';echo$$y;
会报错:
Notice:Undefinedvariable:m['a']['b']['c']in/web/root/index.phponline9
动态变量名只对变量有效,对数组元素是不行的,'m["a"]["b"]["c"]'
就算前面加$,会把整个字符串当做变量,自然是找不到。
简单的你可用个循环
$m=['a'=>['b'=>['c'=>'@@@@@']]];$x='a.b.c';$y=explode('.',$x);$z=$m;foreach($yas$key=>$value){$z=$z[$value];}var_dump($z);
?首先你打印的echo后面的变量$y多了个$
符号,其次如果你想获取@@@@@
,直接$m['a']['b']['c']
其实你写的已经对了,不要着急问,多看一眼你的代码
个人觉得,面对这种问题应该使用考虑使用递归来处理,而不是通过字符串替换。
<?php$data=['a'=>['b'=>['c'=>'@@@@@']]];$path='a.b.c';$arr=explode('.',$path);functiontest($arr,$data){if(array_key_exists($arr[0],$data)){if(count($arr)>1){$key=array_shift($arr);returntest($arr,$data[$key]);}else{return$data[$arr[0]];}}else{returnnull;}}var_dump(test($arr,$data));
$m=['a'=>['b'=>['c'=>'@@@@@']]];$x='a.b.c';echoarray_reduce(explode('.',$x),function($s,$i){return$s[$i];},$m);
如果你用的laravel框架,
$m=['a'=>['b'=>['c'=>'@@@@@']]];$x='a.b.c';$z=array_get($m,$x);return$z;