You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

删除嵌套数组元素后顶级键被篡改的问题求助

问题分析与解决方案

你遇到的问题核心是丢失了原数组的顶级键结构。让我拆解一下:

在你的代码里,你直接把$cur_tokens替换成了$cur_tokens['enu']这个子数组,修改后又直接把这个子数组存回数据库——这就相当于你丢弃了原来的['enu' => [...]]外层结构,自然剩下的元素会变成数字索引的数组。

修正后的代码

// 获取完整的tokens数组
$cur_tokens = get_option('custom_tokens');

// 先确认enu分类存在,避免报错
if (isset($cur_tokens['enu'])) {
    // 把enu子数组存到临时变量,不要直接覆盖原数组
    $enu_tokens = $cur_tokens['enu'];
    
    // 遍历临时变量找要删除的元素
    foreach ($enu_tokens as $key => $cur) {
        if (isset($_POST['token-' . $key])) {
            // 删除指定元素
            unset($enu_tokens[$key]);
            // 重新索引数组(可选,如果你希望保持数字索引连续)
            $enu_tokens = array_values($enu_tokens);
            // 将修改后的子数组放回原数组的enu键下
            $cur_tokens['enu'] = $enu_tokens;
            // 更新完整的数组到数据库
            update_option('custom_tokens', $cur_tokens);
            // 找到要删除的元素后可以跳出循环,避免重复执行
            break;
        }
    }
}

关键修正点

  1. 保留原数组结构:不再直接覆盖$cur_tokens,而是用临时变量操作子数组,修改后再放回原数组的对应键位
  2. 可选的重新索引:使用array_values()可以让删除后的子数组保持连续的数字索引(如果不需要可以去掉这一步)
  3. 存在性检查:先确认$cur_tokens['enu']存在,避免出现Undefined index的错误

额外提示

如果删除后$enu_tokens变成空数组,你可以选择保留['enu' => []]的结构,或者根据需求删除整个enu键:

// 如果子数组为空,删除顶级键
if (empty($enu_tokens)) {
    unset($cur_tokens['enu']);
}

内容的提问来源于stack exchange,提问作者MakingStuffs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:48:07