php中數組的某一個元素的動態路徑問題
世界只因有你
世界只因有你 2017-05-16 13:09:31
0
6
512

假如我知道數組中某一個元素的路徑,我怎麼取到這個元素的值?
下面這段程式碼報錯,該怎麼解決?大家有沒有好的辦法?

$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
世界只因有你
世界只因有你

全部回覆(6)
曾经蜡笔没有小新

動態變數名只對變數有效,對數組元素是不行的,'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); 
我想大声告诉你

?首先你印出來的echo後面的變數$y多了個$符号,其次如果你想获取@@@@@,直接$m['a']['b']['c']

迷茫

其實你寫的已經對了,不要急問,多看一眼你的程式碼

巴扎黑

個人覺得,面對這種問題應該使用考慮使用遞歸來處理,而不是透過字串替換。

<?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));
伊谢尔伦

雷雷

滿天的星座

如果你用的laravel框架,

$m = [ 'a'=>['b'=>['c'=>'@@@@@' ]]];
$x = 'a.b.c';
$z = array_get($m,$x);
return $z;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板