在PHP中以不同的方式合并数组

在PHP中以不同的方式合并数组,php,arrays,Php,Arrays,我有两个阵列: $array1 = array( '0' => 'apple', '1' => '' , '2' => 'cucumber' ); $array2 = array( '0' => '', '1' => 'bmw', '2' => 'chrysler' ); 如果我这样做是为了合并这些阵列: $result_arr = array_merge($array1, $array2); print_r( count ( array_f

我有两个阵列:

$array1 = array( '0' => 'apple', '1' => ''   , '2' => 'cucumber' );

$array2 = array( '0' => '',      '1' => 'bmw', '2' => 'chrysler' );
如果我这样做是为了合并这些阵列:

$result_arr = array_merge($array1, $array2);
print_r( count ( array_filter($result_arr) ) );
$first  = array( '0' => 'apple', '1' => ''   , '2' => 'cucumber', 3 => '');
$second = array( '0' => '',      '1' => 'bmw', '2' => 'chrysler', 3 => '');

$result = array_map(function($a, $b) {
  return $a ?: $b;
}, $first, $second);
print_r($result); 
/* 
[0] => 'apple'
[1] => 'bmw'
[2] => 'cucumber'
[3] => ''
*/
输出为4

然而,我需要得到数字3。因此,当同一位置(同一关键点)上有两件东西时,只计算一次


可以这样合并/计数数组中的元素吗?

生成这些数组的“并集”的一种可能方法:

$result_arr = array_merge($array1, $array2);
print_r( count ( array_filter($result_arr) ) );
$first  = array( '0' => 'apple', '1' => ''   , '2' => 'cucumber', 3 => '');
$second = array( '0' => '',      '1' => 'bmw', '2' => 'chrysler', 3 => '');

$result = array_map(function($a, $b) {
  return $a ?: $b;
}, $first, $second);
print_r($result); 
/* 
[0] => 'apple'
[1] => 'bmw'
[2] => 'cucumber'
[3] => ''
*/


生成的数组将被第一个数组中的非空元素填充,或者(如果非空性检查失败)被第二个数组中的任何类型的元素填充,后者将作为一种回退。

我想它不会比这短得多:

foreach ($array2 as $key->$value) {
    $array1[$key] = $value;
}

如果不想修改原始数组,只需执行两次循环,然后两次添加到第三个数组。

在合并之前,可以从每个数组中删除空白项
array\u walk
带有回调函数,该函数在值为空时删除键,然后合并。