搜尋

首頁  >  問答  >  主體

php中數組的某一個元素的動態路徑問題

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

$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
世界只因有你世界只因有你2791 天前514

全部回覆(6)我來回復

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新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); 

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 13:11:31

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

    回覆
    0
  • 迷茫

    迷茫2017-05-16 13:11:31

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

    回覆
    0
  • 巴扎黑

    巴扎黑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));

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 13:11:31

    雷雷

    回覆
    0
  • 滿天的星座

    滿天的星座2017-05-16 13:11:31

    如果你用的laravel框架,

    $m = [ 'a'=>['b'=>['c'=>'@@@@@' ]]];
    $x = 'a.b.c';
    $z = array_get($m,$x);
    return $z;

    回覆
    0
  • 取消回覆