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']);

这种应该怎么写才好?来讨论讨论啊
...全文
75 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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]]);
        }
    }
不限制应该怎么写

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧