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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:45:05