37

数学では集合を使った 3 つの演算があります: 交差、差、和 (統一) です。PHP では、配列を使ってこの操作を行うことができます。

  • 交差点:array_intersect
  • 違い:array_diff

ユニオンにはどのような機能がありますか?

結果配列に重複を含めることはできません (array_intersectや などarray_diff)。

インデックスが数値の場合array_merge、元の値は上書きされませんが、追加されます ( PHP docs )。

4

11 に答える 11

56

試してくださいarray_merge

array_unique(array_merge($array1, $array2));

PHP マニュアル

于 2012-05-07T16:01:37.480 に答える
11

array_unique( array_merge( ... ) )

于 2012-05-07T16:01:27.747 に答える
11

エイドリアンの答えは、2 つの連続番号付き配列から連続番号付き配列を生成する必要はありません。次のようなオプションがあります。

array_values(array_unique(array_merge($array1, $array2)));

(後でキーの番号を付け直したエイドリアンの答え)

array_keys(array_flip($array1)+array_flip($array2))

(値をキーに入れ、配列の結合演算子を使用します)

array_merge($array1, array_diff($array2, $array1))

(マージする前に、2 番目の配列から共有値を削除します)

ベンチマーク結果 (私のシステムで長さ 1000 の 2 つの配列を 1000 回マージした場合):

  • ユニーク (Adrien のバージョン): 2.862163066864 秒
  • Values_Unique: 3.12 秒
  • Keys_Flip: 2.34 秒
  • Merge_Diff: 2.64 秒

同じテストですが、2 つの配列が非常に似ています (少なくとも 80% 重複):

  • ユニーク (エイドリアン版): 2.92 秒
  • Values_Unique: 3.15 秒
  • Keys_Flip: 1.84 秒
  • Merge_Diff: 2.36 秒

配列ユニオン演算子を使用して実際のユニオンを実行するのが最速の方法のようです。ただしarray_flip、配列の値がすべて文字列またはすべて整数である場合にのみ安全であることに注意してください。オブジェクトの配列の結合を生成する必要がある場合は、 と を使用したバージョンをお勧めしarray_mergeますarray_diff

于 2014-04-01T19:32:39.583 に答える
6

そのためには「+」演算子を使用します。リンク配列演算子を参照してください

于 2014-05-23T05:54:33.367 に答える
5

array_uniqueと を併用array_mergeします。

于 2012-05-07T16:03:02.593 に答える
4

PHP: Array Operatorsドキュメントのコードから:

<?php
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");

$c = $a + $b; // Union of $a and $b
echo "Union of \$a and \$b: \n";
var_dump($c);

$c = $b + $a; // Union of $b and $a
echo "Union of \$b and \$a: \n";
var_dump($c);
?>

実行すると、このスクリプトは次のように出力します。

$a と $b の結合:
配列(3) {
  ["あ"]=>
  string(5) "りんご"
  ["b"]=>
  string(6) "バナナ"
  ["c"]=>
  string(6) "チェリー"
}
$b と $a の結合:
配列(3) {
  ["あ"]=>
  string(4) "ナシ"
  ["b"]=>
  string(10) "ストロベリー"
  ["c"]=>
  string(6) "チェリー"
}
于 2012-05-07T16:04:14.827 に答える
1
$result = array_merge_recursive($first, $second);

内部に配列を持つ配列がある場合に役立ちます。

于 2015-01-07T09:59:21.063 に答える
0

+オペレーター:

$x[0] = 4;
$x[1] = 1;

$y[0] = 9;
$y[2] = 5;

$u = $y + $x;

// Results in:
$u[0] === 9;
$u[1] === 1;
$u[2] === 5;

$x + $y!=に注意してください$y + $x

于 2012-05-07T16:07:15.173 に答える
0

使用するだけ $array1 + $array2 で、両方の配列の結合が得られます。

于 2014-01-20T12:30:50.793 に答える