在php中添加数组
阵列已被全面覆盖,但我仍然对如何解决这一问题感到困惑。我有两个数组,我想合并而不覆盖重复的键,即在php中添加数组,php,arrays,Php,Arrays,阵列已被全面覆盖,但我仍然对如何解决这一问题感到困惑。我有两个数组,我想合并而不覆盖重复的键,即 Array1 ( [0] => 0 [1] => 1 [2] => 1 [3] => 1 [4] => 1 [5] => 0 [6] => 0 ) + Array2 ( [0] => 0 [1] => 0 [2] => 0 [3] => 0
Array1
(
[0] => 0
[1] => 1
[2] => 1
[3] => 1
[4] => 1
[5] => 0
[6] => 0
)
+
Array2
(
[0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
[5] => 0
[6] => 1
)
我的理想结果是
Array1 + Array2
(
[0] => 0
[1] => 1
[2] => 1
[3] => 1
[4] => 1
[5] => 0
[6] => 1
)
我该怎么做?我尝试过使用+,但它给出了第一个数组,结果是不会覆盖具有数字键的重复元素。不会覆盖具有数字键的重复元素。如果要查找两个数组中的较大值(非零),可以这样迭代:
$array1 = array(1,0,0,1,1,1);
$array2 = array(0,0,1,0,0,1);
$newarr = array();
foreach ($array1 as $k => $v) {
$newarr[$k] = max($array1[$k], $array2[$k]);
}
print_r($newarr);
Array
(
[0] => 1
[1] => 0
[2] => 1
[3] => 1
[4] => 1
[5] => 1
)
如果需要添加值,请使用:
$newarr = array();
foreach ($array1 as $k => $v) {
$newarr[$k] = $array1[$k] + $array2[$k];
}
如果要查找两个数组中的较大值(非零),可以这样迭代:
$array1 = array(1,0,0,1,1,1);
$array2 = array(0,0,1,0,0,1);
$newarr = array();
foreach ($array1 as $k => $v) {
$newarr[$k] = max($array1[$k], $array2[$k]);
}
print_r($newarr);
Array
(
[0] => 1
[1] => 0
[2] => 1
[3] => 1
[4] => 1
[5] => 1
)
如果需要添加值,请使用:
$newarr = array();
foreach ($array1 as $k => $v) {
$newarr[$k] = $array1[$k] + $array2[$k];
}
假设阵列长度相同:
function bitwise_or_arrays($arr1, $arr2) {
$result = array();
for ($i = 0; $i < count($arr1); $i++) {
$result[$i] = $arr1 | $arr2;
}
return $result;
}
函数按位\u或\u数组($arr1,$arr2){
$result=array();
对于($i=0;$i
如果阵列长度相同:
function bitwise_or_arrays($arr1, $arr2) {
$result = array();
for ($i = 0; $i < count($arr1); $i++) {
$result[$i] = $arr1 | $arr2;
}
return $result;
}
函数按位\u或\u数组($arr1,$arr2){
$result=array();
对于($i=0;$i
您要做的是将两个数组映射到单个数组中,其中包含两个相应值的最大值,如下所示:
$array1 = array(0, 1, 1, 1, 1, 0, 0);
$array2 = array(0, 0, 0, 0, 0, 0, 1);
$result = array_map('max', $array1, $array2);
array(7) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(1)
[3]=>
int(1)
[4]=>
int(1)
[5]=>
int(0)
[6]=>
int(1)
}
请参见此处的结果:
看起来是这样的:
$array1 = array(0, 1, 1, 1, 1, 0, 0);
$array2 = array(0, 0, 0, 0, 0, 0, 1);
$result = array_map('max', $array1, $array2);
array(7) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(1)
[3]=>
int(1)
[4]=>
int(1)
[5]=>
int(0)
[6]=>
int(1)
}
您要做的是将两个数组映射到单个数组中,其中包含两个相应值的最大值,如下所示:
$array1 = array(0, 1, 1, 1, 1, 0, 0);
$array2 = array(0, 0, 0, 0, 0, 0, 1);
$result = array_map('max', $array1, $array2);
array(7) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(1)
[3]=>
int(1)
[4]=>
int(1)
[5]=>
int(0)
[6]=>
int(1)
}
请参见此处的结果:
看起来是这样的:
$array1 = array(0, 1, 1, 1, 1, 0, 0);
$array2 = array(0, 0, 0, 0, 0, 0, 1);
$result = array_map('max', $array1, $array2);
array(7) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
int(1)
[3]=>
int(1)
[4]=>
int(1)
[5]=>
int(0)
[6]=>
int(1)
}
只是为了好玩(尽管在0和1值的情况下它是有效的:)
很抱歉这个变体,我知道它很疯狂,但就是不能不发布它。数组看起来像位掩码0111100
和0000001
。所以只需使用按位|
运算符
因此,结果:
Array
(
[0] => 0
[1] => 1
[2] => 1
[3] => 1
[4] => 1
[5] => 0
[6] => 1
)
只是为了好玩(尽管在0和1值的情况下它是有效的:)
很抱歉这个变体,我知道它很疯狂,但就是不能不发布它。数组看起来像位掩码0111100
和0000001
。所以只需使用按位|
运算符
因此,结果:
Array
(
[0] => 0
[1] => 1
[2] => 1
[3] => 1
[4] => 1
[5] => 0
[6] => 1
)
如果您希望合并它们,请使用array_combine() 以下是如何合并阵列:
$beginning = 'foo';
$end = array(1 => 'bar');
$result = array_merge((array)$beginning, (array)$end);
print_r($result);
//output:
Array(
[0] => foo
[1] => bar
)
下面是如何添加值
$a = array(0=>1, 1=>2, 2=>3, 3=>4);
$b = array(0=>5, 1=>6, 2=>7, 3=>8);
$c = $a[0] += $b[0];
print_r($c);//output: 6
我不是php的大师,但我希望这能帮助你 如果要将它们组合起来,请使用array\u combine() 以下是如何合并阵列:
$beginning = 'foo';
$end = array(1 => 'bar');
$result = array_merge((array)$beginning, (array)$end);
print_r($result);
//output:
Array(
[0] => foo
[1] => bar
)
下面是如何添加值
$a = array(0=>1, 1=>2, 2=>3, 3=>4);
$b = array(0=>5, 1=>6, 2=>7, 3=>8);
$c = $a[0] += $b[0];
print_r($c);//output: 6
我不是php的大师,但我希望这能帮助你 只是为了好玩:
$array1 = array(0,1,1,1,1,0,0);
$array2 = array(0,0,0,0,0,0,1);
$array3 = str_split(decbin(bindec(implode('',$array1)) | bindec(implode('',$array2))));
var_dump($array3);
不幸的是,它会修剪前导零
使用
$array3 = str_split(str_pad(decbin(bindec(implode('',$array1)) | bindec(implode('',$array2))),count($array1),'0',STR_PAD_LEFT));
将恢复前导零,但感觉不干净,只是为了好玩:
$array1 = array(0,1,1,1,1,0,0);
$array2 = array(0,0,0,0,0,0,1);
$array3 = str_split(decbin(bindec(implode('',$array1)) | bindec(implode('',$array2))));
var_dump($array3);
不幸的是,它会修剪前导零
使用
$array3 = str_split(str_pad(decbin(bindec(implode('',$array1)) | bindec(implode('',$array2))),count($array1),'0',STR_PAD_LEFT));
将恢复前导零,但感觉不干净那么您是说要从两个数组键中选择更高的值?或者你想在每个键上加上两个数组的总数?你的要求是不一致的。要使用第一个数组中的值,除非被第二个数组覆盖,还是要执行相反的操作?在这两种情况下,显示的结果都不正确。下定决心,阵列1+2就是解决方案。你能提供一个你尝试过的代码的例子吗?那么你是说你想从两个数组键中选择更高的值吗?或者你想在每个键上加上两个数组的总数?你的要求是不一致的。要使用第一个数组中的值,除非被第二个数组覆盖,还是要执行相反的操作?在这两种情况下,显示的结果都不正确。下定决心,阵列1+2就是解决方案。您能提供一个您尝试过的代码示例吗?但未被覆盖的数字键将附加在数组末尾…但未被覆盖的数字键将附加在数组末尾…+1表示智能
array\u map
循环使用。我想这就是OP想要做的,但是有一个模糊的问题,谁知道呢?这非常有效,正是我想要的。感谢大家的快速响应:-)@mr_j:我很高兴它能帮上忙:)+1用于智能array_map
循环使用。我想这就是OP想要做的,但是有一个模糊的问题,谁知道呢?这非常有效,正是我想要的。谢谢大家的快速反应:-)@mr_j:我很高兴这有帮助:)