0

私はこれらの2つの配列を持っています:

$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) ) );

出力は 4 になります。

ただし、数字の 3 を取得する必要があります。したがって、同じ位置 (同じキー) に 2 つのものが存在する場合は、1 回だけカウントします。

そのような配列内の要素をマージ/カウントすることは可能ですか?

4

2 に答える 2

2

これらの配列の「結合」を生成する 1 つの可能な方法:

$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] => ''
*/

デモ

結果の配列は、最初の配列からの空でない要素で満たされるか、(空でないことのチェックが失敗した場合) 2 番目の配列からの任意のタイプの要素で埋められます - 後者は一種のフォールバックとして機能します。

于 2013-11-12T21:44:52.210 に答える
0

これよりもずっと短くなることはないと思います:

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

元の配列を変更したくない場合は、ループを 2 回実行し、2 回とも 3 番目の配列に追加します。

于 2013-11-12T21:47:22.837 に答える