PHP中如何向数组追加嵌套数组且不覆盖原有内容?
解决PHP数组meta_query追加嵌套数组不覆盖的问题
你遇到的核心问题是用错了数组操作方法:array_merge是用来合并两个数组的键值对,当键名重复时会覆盖原有值,但你需要的是往数组里追加新的子数组元素,而非合并键值。
正确实现方式
先初始化包含relation的基础meta_query数组,然后通过循环直接往数组里追加每个条件子数组即可:
// 初始化meta_query,先指定OR关系 $meta_query = array( 'relation' => 'OR' ); // 遍历合约类型,逐个追加条件子数组 foreach ($contract_types as $contract_type) { $meta_query[] = array( 'key' => 'contract_type', 'value' => $contract_type, 'compare' => '=', ); } // 构建最终的查询数组 $arr = array( 'post_type' => 'smart_contract', 'post_status' => 'publish', 'author' => $user_id, 'meta_query' => $meta_query );
另一种写法(用array_push)
效果和上面完全一致,只是语法不同:
foreach ($contract_types as $contract_type) { $condition = array( 'key' => 'contract_type', 'value' => $contract_type, 'compare' => '=', ); array_push($meta_query, $condition); }
为什么之前的写法错误
你之前用array_merge($or_array, $or_array2)时,每次循环都是把$or_array2里的key/value/compare键值对合并到$or_array中,因为这些键名重复,所以每次循环都会覆盖之前的键值,最终只会保留最后一次循环的条件,而不是累积所有子数组。而用$meta_query[]或array_push是直接往数组末尾添加新的子数组元素,这样就能保留所有OR条件。
内容的提问来源于stack exchange,提问作者ratib90486
相关产品推荐
相关产品推荐

