如何在多维数组中合并重复的键?

时间:2018-07-13 13:38:24

标签: php foreach

我有此代码:

$data = array ( 
    "2018" => array (   
        "September" => array (  
            "02" => ("Line 1"), 
            "02" => ("Line 11"), 
            "12" => ("Line 2"), 
            "31" => ("Line 3")
        )   
    )
);

echo '<pre>'; print_r($data); echo '</pre>';

您看到的是重复的键“ 02” 因此,我得到了这个结果

Array (
    [2018] => Array (
        [September] => Array (
            [02] => Line 11
            [12] => Line 2
            [31] => Line 3
        )
    )
)

因此[02] => Line 1丢失了

我想知道如何合并“ 02”键,这样它将变成这样:

"02" => ("Line 1", "Line 11")

我的问题是我从mysql生成了这些数组,所以我需要一个动态代码,而不是诸如“如果9月两次“ 02”则...“

我需要类似if $year > $month和重复键的内容,然后将其值合并。

1 个答案:

答案 0 :(得分:1)

使用array_key_exists()来检查密钥,然后再进行设置。如果不存在,则为新键创建一个条目,并将新值放在一个项目的数组中。如果确实存在,则只需将新值添加到现有数组的末尾。

// Assume $key is your key and $value is your value.
while (...) {
    if (array_key_exists($key, $array)) {
        $array[$key][] = $value; // Append the new value to the existing array.
    } else {
        $array[$key] = [$value]; // Create a new array with the new value in it.
    }
}

编辑:我认为在未定义的键上使用数组追加语法会生成警告,但事实并非如此,因此您可以简化为以下内容:

while (...) {
    $array[$key][] = $value;
}