我将客户订单的数据保存在$ _SESSION ['input']多维数组中,如下所示:
$ _ SESSION ['input'] ['6'] ['s'] === 4 //这意味着客户订购了尺寸为标识为6的4x产品。
通过$ _POST ['input']提交的每个新输入(也是具有相同格式的多维数组),我想用$ _POST ['input'添加和/或覆盖$ _SESSION ['input']数据]数据。
问题是:
我找到的所有答案都是为了不覆盖值或覆盖值而不合并数组。
这是否有功能?或者其他一些想法?
答案 0 :(得分:2)
您可以修改how to merge multidimensional arrays whilst preserving all unique key/values?提供的功能以保留“深层”键,这些内容符合......
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
)
)
)
答案 1 :(得分:1)
为什么不使用for()循环来执行此操作?
在一个数组上循环并检查另一个数组中是否存在相同的键,如果是,则覆盖与当前键对应的第一个数组值。
答案 2 :(得分:0)
我使用了Dave和mArm.ch的想法,并提出了一个非常简单的解决方案。
目标是合并关联$array1
和$array2
并用$array1
覆盖$array2
。
代码:
foreach (array_keys($array2) as $key) {
if (isset($array1[$key]) unset($array1[$key]);
}
$desired_array = $array1 + $array2;
所以基本上我在重叠时从一个数组中删除键,然后我可以简单地添加它们。
请确保数组isset()
和is_array()
。否则你会收到致命的错误。