PHP向数组追加元素生成嵌套数组 WordPress post_meta存储异常问题
异常触发原因
- 核心原因是
get_post_meta函数参数使用错误:WordPress提供的get_post_meta($post_id, $key, $single)第三个参数$single用于指定是否返回单条值:- 传
false时,无论该meta键实际存储的是什么结构,都会返回所有匹配值组成的数组,你存储的排除数组会被包裹在返回结果的0下标中,这就是你拿到的$exclude本身就是嵌套结构的根源,和原有数组键名是否重复无关。哪怕用array_merge合并,因为原始$exclude就是二维结构,合并后依然会存在嵌套问题。
- 传
- 额外存在变量名错误:你最终调用
update_post_meta时传入的$sold_numbers变量并未在代码中定义,你实际操作的数组变量是$exclude,该错误会导致存储的内容不符合预期。
修复方案
将代码调整为以下内容即可:
// 第三个参数传true直接拿到存储的一维数组,兼容首次存储为空的场景给默认空数组 $exclude = get_post_meta($product_id, '_numbers_sold', true) ?: []; // 起始值建议传入数字类型,和后续逻辑匹配 $numbers = random_numbers(1, $max_tickets, $qty, $exclude); foreach($numbers as $number){ $exclude[] = $number; } // 传入实际操作的$exclude变量更新 update_post_meta($product_id, '_numbers_sold', $exclude);
内容的提问来源于stack exchange,提问作者danyo
相关产品推荐
相关产品推荐

