unset数组指定的下标(散一散分)

下雨的声音丶 2019-04-04 02:52:08
比如我现在有类似这样的数组

$config = [
'a'=> [
'b'=>[
'c'=>1,
'd'=>1,
],
],
'e'=> [
'f'=>[
'g'=>1,
'h'=>[
'i'=>1,
'j'=>1,
],
],
],
];

层级不限制
然后 我传入

function('a.b.c');

unset($config['a']['b']['c']);

或者

function('e.f');

unset($config['e']['f']);

这种应该怎么写才好?来讨论讨论啊
...全文
12 点赞 收藏 2
写回复
2 条回复
下雨的声音丶 2020年08月22日
隔了这么久,翻到之前的问题,今天一下就想到怎么处理了

/**
 * @param $name
 */
function remove($name)
{
    $config = [
        'a'=> [
            'b'=>[
                'c'=>1,
                'd'=>1,
            ],
        ],
        'e'=> [
            'f'=>[
                'g'=>1,
                'h'=>[
                    'i'=>1,
                    'j'=>1,
                ],
            ],
        ],
    ];
    $name = explode('.', $name);
    $remove = '$config';
    foreach ($name as $key) {
        $remove .= "['$key']";
    }
    eval("unset($remove);");
    var_dump($config);
}
remove('a.b.c');
执行之后得到 array(2) { ["a"]=> array(1) { ["b"]=> array(1) { ["d"]=> int(1) } } ["e"]=> array(1) { ["f"]=> array(2) { ["g"]=> int(1) ["h"]=> array(2) { ["i"]=> int(1) ["j"]=> int(1) } } } }
回复 点赞
下雨的声音丶 2019年04月04日
其实就是删除配置TP 框架 限制了只能删除三级

/**
     * 移除配置
     * @access public
     * @param  string  $name 配置参数名(支持三级配置 .号分割)
     * @return void
     */
    public function remove($name)
    {
        if (!strpos($name, '.')) {
            $name = $this->prefix . '.' . $name;
        }

        $name = explode('.', $name, 3);

        if (count($name) == 2) {
            unset($this->config[strtolower($name[0])][$name[1]]);
        } else {
            unset($this->config[strtolower($name[0])][$name[1]][$name[2]]);
        }
    }
不限制应该怎么写
回复 点赞
发动态
发帖子
基础编程
创建于2007-09-28

9734

社区成员

14.0w+

社区内容

从PHP安装配置,PHP入门,PHP基础到PHP应用
社区公告
暂无公告