Php 合并具有相同键的数组

Php 合并具有相同键的数组,php,array-merge,Php,Array Merge,在一个软件中,我使用array\u merge函数合并两个数组。但我需要将相同的数组(当然,使用相同的键)添加到现有数组中 问题是: $A = array('a' => 1, 'b' => 2, 'c' => 3); $B = array('c' => 4, 'd'=> 5); array_merge($A, $B); // result [a] => 1 [b] => 2 [c] => 4 [d] => 5 如您所见,'c'

在一个软件中,我使用
array\u merge
函数合并两个数组。但我需要将相同的数组(当然,使用相同的键)添加到现有数组中

问题是:

 $A = array('a' => 1, 'b' => 2, 'c' => 3);
 $B = array('c' => 4, 'd'=> 5);

 array_merge($A, $B);

 // result
 [a] => 1 [b] => 2 [c] => 4 [d] => 5
如您所见,
'c'=>3
缺失


那么,我如何用相同的键合并它们呢?

一个数组中的两个条目不能共享一个键,您需要更改需要使用的重复项的键,而不是
数组\u merge
。当然,数组中只能有一个等于
'c'
的键,但是关联的值将是一个同时包含
3
4
的数组

如果要按以下方式转换此阵列:

$outer_array = array();
$unique_array = array();
foreach($arr1 as $key => $value)
{
    $inner_array = array();

    $fid_value = $value['fid'];
    if(!in_array($value['fid'], $unique_array))
    {
            array_push($unique_array, $fid_value);
            unset($value['fid']);
            array_push($inner_array, $value);
            $outer_array[$fid_value] = $inner_array;


    }else{
            unset($value['fid']);
            array_push($outer_array[$fid_value], $value);

    }
}
var_dump(array_values($outer_array));
因此,我的回答如下:

public function mergePerKey($array1,$array2)
    {
        $mergedArray = [];

        foreach ($array1 as $key => $value) 
        {
            if(isset($array2[$key]))
             {
               $mergedArray[$value] = null;

               continue;
             }
            $mergedArray[$value] = $array2[$key];
        }

        return $mergedArray;
    }

希望这个答案能对某些人有所帮助。

我刚刚编写了这个函数,它应该能帮你解决问题,但它确实留下了连接

试试这个:

$array\u one=['ratio\u type'];
$array_two=['ratio_type','ratio_type'];
$array_-three=['ratio_-type'];
$array_four=['ratio_type'];
$array_-five=['ratio_-type','ratio_-type','ratio_-type'];
$array_-six=['ratio_-type'];
$array_seven=['ratio_type'];
$array_-eight=['ratio_-type'];
$all\u array\u elements=array\u merge\u recursive(
$1,
$2,
$3,
$4,
五美元,
$6,
$7,
$8
);
foreach($key=>$value的所有数组元素){
echo“[$key]”-.$value.PHP_EOL;
}
//或
变量转储(所有数组元素);

数组应该有唯一的键…这是数组的基本属性。你如何想象一个数组有两个相同的键?正如他们所说,键必须是唯一的。考虑使用2D数组而不是关联数组,那么可以在没有任何冲突的情况下合并它们。i、 e.数组(数组('a',1),数组('b',2),数组('c',3),数组('c',4),数组('d',5))@Nemoden-是的,这太奇怪了。但是我的DB类需要将WHERE和PARAMS合并到mysqli中的绑定中。无论如何,我需要合并它们:)工作代码如下。不过,它构建的是实际的where语句,而不是绑定。希望对你有帮助。嗯。。。奇怪。。。我将
array\u merge
更改为
array\u merge\u recursive
,得到了相同的结果(数组键重新编号)。在PHP.net站点的示例#3下有一条注释:“如果您想将第二个数组中的数组元素附加到第一个数组中,同时不覆盖第一个数组中的元素,也不重新编制索引,请使用+数组联合运算符”。我的情况就是这样。你在哪里读到过,
array\u merge\u recursive
不会对键重新编号?@trejder:这个问题没有整数键,所以这里不适用重新索引。我的回答是这样的。@jon您提供的答案链接已断开。如果你还有代码,请你内联代码好吗?@AdamCameron使用问题中的代码,只是使用
array\u merge\u recursive
而不是“普通”版本。@Elyor
array\u merge
array\u merge\u recursive
被记录为字符串键和整数键有不同的行为,还有一个很好的理由:如果没有,那么
数组合并([1],[2])
的结果将是
[0=>2]
,这至少是“意外的”。所以他们假设如果你有整数键,那么它们其实并不重要。如果你有重要的整数键,那么你必须提供考虑到这一点的显式逻辑。非常感谢你,这正是我想要的合并类型!!投票支持包含样本,而不是接受答案中的死链接。
 $A = array('a' => 1, 'b' => 2, 'c' => 3);
 $B = array('c' => 4, 'd'=> 5);
 $C = array_merge_recursive($A, $B);
 $aWhere = array();
 foreach ($C as $k=>$v) {

    if (is_array($v)) {
        $aWhere[] = $k . ' in ('.implode(', ',$v).')';
    }
    else {
        $aWhere[] = $k . ' = ' . $v;
    }
 }
 $where = implode(' AND ', $aWhere);
 echo $where;
$arr1 = array(
   "0" => array("fid" => 1, "tid" => 1, "name" => "Melon"),
   "1" => array("fid" => 1, "tid" => 4, "name" => "Tansuozhe"),
   "2" => array("fid" => 1, "tid" => 6, "name" => "Chao"),
   "3" => array("fid" => 1, "tid" => 7, "name" => "Xi"),
   "4" => array("fid" => 2, "tid" => 9, "name" => "Xigua")
);
$arr2 = array(
   "0" => array(
          "0" => array("fid" => 1, "tid" => 1, "name" => "Melon"),
          "1" => array("fid" => 1, "tid" => 4, "name" => "Tansuozhe"),
          "2" => array("fid" => 1, "tid" => 6, "name" => "Chao"),
          "3" => array("fid" => 1, "tid" => 7, "name" => "Xi")
    ),

    "1" => array(
          "0" =>array("fid" => 2, "tid" => 9, "name" => "Xigua")
     )
);
$outer_array = array();
$unique_array = array();
foreach($arr1 as $key => $value)
{
    $inner_array = array();

    $fid_value = $value['fid'];
    if(!in_array($value['fid'], $unique_array))
    {
            array_push($unique_array, $fid_value);
            unset($value['fid']);
            array_push($inner_array, $value);
            $outer_array[$fid_value] = $inner_array;


    }else{
            unset($value['fid']);
            array_push($outer_array[$fid_value], $value);

    }
}
var_dump(array_values($outer_array));
public function mergePerKey($array1,$array2)
    {
        $mergedArray = [];

        foreach ($array1 as $key => $value) 
        {
            if(isset($array2[$key]))
             {
               $mergedArray[$value] = null;

               continue;
             }
            $mergedArray[$value] = $array2[$key];
        }

        return $mergedArray;
    }