在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:我很高兴这有帮助:)