php中数组的某一个元素的动态路径问题
世界只因有你
世界只因有你 2017-05-16 13:09:31
[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
世界只因有你
世界只因有你

全部回复(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));
伊谢尔伦
$m  = ['a'=>['b'=>['c'=>'@@@@@']]];
$x = 'a.b.c';

echo array_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;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号