Php 合并数组并在键相等时覆盖值
我将客户订单的数据保存在$_SESSION['input']多维数组中,如下所示: $\u SESSION['input']['6']['s']==4//这意味着客户订购了id为6、大小为s的4x产品 对于通过$_POST['input'](也是一个具有相同格式的多维数组)提交的每个新输入,我想用$_POST['input']数据添加和/或覆盖$_会话['input']数据 问题是:Php 合并数组并在键相等时覆盖值,php,arrays,session,multidimensional-array,array-merge,Php,Arrays,Session,Multidimensional Array,Array Merge,我将客户订单的数据保存在$_SESSION['input']多维数组中,如下所示: $\u SESSION['input']['6']['s']==4//这意味着客户订购了id为6、大小为s的4x产品 对于通过$_POST['input'](也是一个具有相同格式的多维数组)提交的每个新输入,我想用$_POST['input']数据添加和/或覆盖$_会话['input']数据 问题是: 当我使用 $\u SESSION['input']=array\u merge($\u SESSION['inp
在一个数组上循环并检查另一个数组中是否存在相同的键,如果存在,则覆盖与当前键对应的第一个数组值。您可以修改在中提供的函数以保留“深”键,类似于
function arraysMergeUnique($array1, $array2)
{
foreach ($array2 as $k => $v) {
if ( is_array($array1) ) {
if ( is_string($v) && ! in_array($v, $array1) ) {
/**
* Preserve keys in n-dimension using $k
*/
$array1[$k] = $v;
} else if ( is_array($v) ) {
if ( isset($array1[$k]) ) {
$array1[$k] = arraysMergeUnique($array1[$k], $v);
} else {
$array1[$k] = $v;
}
}
} else {
$array1 = array($v);
}
}
return $array1;
}
$one = array('input' => array(6 => array('s' => 'old')));
$two = array('input' => array(6 => array('s' => 'new')));
$three = arraysMergeUnique($one, $two);
三美元就是:
Array
(
[input] => Array
(
[6] => Array
(
[s] => new
)
)
)
我利用了Dave和mArm.ch的想法,提出了一个非常简单的解决方案 目标是合并关联的
$array1
和$array2
并用$array2
覆盖$array1
守则:
foreach (array_keys($array2) as $key) {
if (isset($array1[$key]) unset($array1[$key]);
}
$desired_array = $array1 + $array2;
所以基本上,当存在重叠时,我从一个数组中删除键,然后我可以简单地添加它们
请确保两个数组
isset()
和都是\u array()
。否则会出现致命错误。为什么要将id存储为数组中的字符串。。。