suchen

Heim  >  Fragen und Antworten  >  Hauptteil

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
世界只因有你世界只因有你2793 Tage vor519

Antworte allen(6)Ich werde antworten

  • 曾经蜡笔没有小新

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

    Antwort
    0
  • 我想大声告诉你

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

    ?首先你打印的echo后面的变量$y多了个$符号,其次如果你想获取@@@@@,直接$m['a']['b']['c']

    Antwort
    0
  • 迷茫

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

    其实你写的已经对了,不要着急问,多看一眼你的代码

    Antwort
    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));

    Antwort
    0
  • 伊谢尔伦

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

    $m  = ['a'=>['b'=>['c'=>'@@@@@']]];
    $x = 'a.b.c';
    
    echo array_reduce(explode('.', $x), function($s, $i) { return $s[$i]; }, $m);

    Antwort
    0
  • 滿天的星座

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

    如果你用的laravel框架,

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

    Antwort
    0
  • StornierenAntwort