【问题标题】:merge two associative arrays having same key合并两个具有相同键的关联数组
【发布时间】:2017-06-02 21:43:30
【问题描述】:

我有两个数组:

$arr1 = array("123" => "abc");

$arr2 = array("123" => "xyz", "456" => "lmn");

我希望结果数组是:

$arr = array("123" => "abc,xyz", "456" => "lmn");

我知道我可以编写一些代码来获取与键对应的值,然后使用分隔符连接,例如 ';'或',',但我想知道有没有有效的方法来做到这一点? 可能是内置函数?

提前致谢!

【问题讨论】:

  • 我可以知道这是否是一个有效的数组?
  • 是的,它是一个有效的数组
  • array_merge_recursive($arr1, $arr2); // 试试这个
  • @VishnuBhadoriya:array_merge_recursive 不适用于整数索引

标签: php merge associative-array


【解决方案1】:

简单的 foreach 就可以了!检查内联 cmets

$arr1 = ["123" => "abc"];

$arr2 = ["123" => "xyz", "456" => "lmn"];

foreach ($arr2 as $key => $value) {
    if(array_key_exists($key, $arr1)) // Check if key exists in array
        $arr1[$key] .= ",$value";     // If so, append
    else
        $arr1[$key] = $value;         // otherwise, add
}

print_r($arr1);

打印

Array
(
    [123] => abc,xyz
    [456] => lmn
)

查看Eval

【讨论】:

  • 谢谢!但我一直在寻找更像 array_merge() 的东西,这样我就不必编写这个额外的代码了。
【解决方案2】:

试试这个:

$arr1 = array("123" => "abc");

$arr2 = array("123" => "xyz", "456" => "lmn");

$o = [];
foreach($arr1 as $k => $v)
{
    $o[$k][] = $v;
}
foreach($arr2 as $k => $v)
{
    $o[$k][] = $v;
}
$result = array_map(function($v){implode(',', array_unique($v));}, $o);

【讨论】:

    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多