假如我知道數組中某一個元素的路徑,我怎麼取到這個元素的值?
下面這段程式碼報錯,該怎麼解決?大家有沒有好的辦法?
$m = ['a'=>['b'=>['c'=>'@@@@@']]];
$x = 'a.b.c';
$y = str_replace('.','\'][\'',$x);
$y = 'm[\''.$y.'\']';
echo $$y;
會報錯:
Notice: Undefined variable: m['a']['b']['c'] in /web/root/index.php on line 9
曾经蜡笔没有小新2017-05-16 13:11:31
動態變數名只對變數有效,對數組元素是不行的,'m["a"]["b"]["c"]'
就算前面加$, 會把整個字串當做變量,自然是找不到。
簡單的你可用個循環
$m = ['a'=>['b'=>['c'=>'@@@@@']]];
$x = 'a.b.c';
$y = explode('.',$x);
$z = $m;
foreach ($y as $key => $value) {
$z = $z[$value];
}
var_dump($z);
巴扎黑2017-05-16 13:11:31
個人覺得,面對這種問題應該使用考慮使用遞歸來處理,而不是透過字串替換。
<?php
$data = [
'a'=>[
'b'=>[
'c'=>'@@@@@'
]
]
];
$path = 'a.b.c';
$arr = explode('.',$path);
function test($arr, $data){
if(array_key_exists($arr[0],$data)){
if(count($arr) > 1){
$key = array_shift($arr);
return test($arr, $data[$key]);
}else{
return $data[$arr[0]];
}
}else{
return null;
}
}
var_dump(test($arr,$data));
滿天的星座2017-05-16 13:11:31
如果你用的laravel框架,
$m = [ 'a'=>['b'=>['c'=>'@@@@@' ]]];
$x = 'a.b.c';
$z = array_get($m,$x);
return $z;