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

PHP合并含重复键的数组:解决array_combine去重问题

解决PHP中带重复键的数组合并问题

嘿,这个问题我之前也踩过坑!首先得明确一个核心点:PHP的关联数组不支持重复键——你给出的期望输出在实际运行中是不可能存在的,因为当你尝试给同一个键赋值两次时,后面的值会直接覆盖前面的,最终cuti bersama只会保留最后一个日期2018-2-13。

不过我们可以通过两种方式来满足你「保留所有键值对应关系」的需求,看你更倾向哪种:

方案1:把重复键的对应值合并成数组

如果希望同一个标题下能关联所有对应的日期,可以手动遍历两个数组,把相同标题的值存到一个子数组里:

$title = array('new year', 'cuti bersama', 'cuti bersama');
$date = array('2018-1-1', '2018-1-10', '2018-2-13');

$title_date = [];
foreach ($title as $index => $key) {
    // 如果键不存在,先初始化一个空数组
    if (!isset($title_date[$key])) {
        $title_date[$key] = [];
    }
    // 把对应的日期追加到子数组里
    $title_date[$key][] = $date[$index];
}

print_r($title_date);

运行后输出的结果是:

Array
(
    [new year] => Array
        (
            [0] => 2018-1-1
        )

    [cuti bersama] => Array
        (
            [0] => 2018-1-10
            [1] => 2018-2-13
        )

)

方案2:用索引数组存储独立的键值对

如果你不想把值合并成数组,而是想保留每一组「标题-日期」的独立关系,可以用索引数组来存储每个键值组合:

$title = array('new year', 'cuti bersama', 'cuti bersama');
$date = array('2018-1-1', '2018-1-10', '2018-2-13');

$title_date = [];
foreach ($title as $index => $key) {
    $title_date[] = [
        'title' => $key,
        'date' => $date[$index]
    ];
}

print_r($title_date);

输出结果如下:

Array
(
    [0] => Array
        (
            [title] => new year
            [date] => 2018-1-1
        )

    [1] => Array
        (
            [title] => cuti bersama
            [date] => 2018-1-10
        )

    [2] => Array
        (
            [title] => cuti bersama
            [date] => 2018-2-13
        )

)

为什么array_combine会丢数据?

最后说下原因:array_combine的逻辑是用第一个数组的元素当键,第二个数组的对应元素当值,但PHP要求数组的键必须唯一,所以遇到重复键时,后面的值会直接覆盖前面的,这就是你只看到一个cuti bersama的原因。

内容的提问来源于stack exchange,提问作者Andhika R.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:34:39