0

初心者なので、array_intersect 関数に問題があります。交差する 2 つの配列を比較していますが、いくつかの結果が 2 回得られます。例: 2 つの配列

$array1 = array(apple, orange, orange, apricot, melon, watermelon);
$array2 = array(apple, orange);

$result = array_intersect($array1, $array2);これは以下を返します:

$result = array(apple, orange, orange);

しかし、私はこれが欲しい:

$result = array(apple, orange);

これが戻ってきて、それぞれ1回ずつ欲しいappleですorange。現在、リンゴ、オレンジ、別のオレンジを返します。何か不足しているのか、それとも単に間違った機能を使用しているだけなのか.

編集:答えに基づいて、これを明確にする必要があります。2番目の配列が

$array1 = array(apple, orange, orange, apricot, melon, watermelon);
$array2 = array(apple, orange, orange);

結果に2つのオレンジが必要なので、そうarray_uniqueしません。

$result = array(apple, orange, orange);
4

6 に答える 6

1

結果が 1 回だけ必要な場合は、array_unique() でフィルター処理する必要があります。array_intersection() は、それらが共通しているものだけを結果としてもたらします。そして、それはオレンジ色です。あなたの場合、$array1 で 2 回です。問題は、$array1 にオレンジが 2 つある理由です。

http://ch2.php.net/manual/en/function.array-unique.php

編集:これはうまくいくかもしれません:

$array1 = array('apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon');
$array2 = array('apple', 'orange');
$result = array_intersect($array1, $array2);
$diff = array_diff($result, $array2);
if(!empty($diff)) {
    $result = array_unique($result);
}
于 2014-08-01T06:49:10.820 に答える
1

以前の回答はすべてあなたの意図を逃しています。にあるからの要素を保持したいと考えて$array2$array1ます。順序関数のパラメーターを逆にするだけです。 array_intersect()後続のパラメーターで見つかった最初のパラメーターから値を返します。

コード: (デモ)

$array1 = ['apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon'];
$array2 = ['apple', 'orange', 'orange'];

var_export(
    array_intersect($array2, $array1)
);

出力:

array (
  0 => 'apple',
  1 => 'orange',
  2 => 'orange',
)
于 2022-02-21T05:02:23.917 に答える
-1

このようなものが必要かもしれませんか?http://php.net/manual/en/function.array-intersect-assoc.php

$array1 = array('apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon');
$array2 = array('apple', 'orange');
$array3 = array('apple', 'orange', 'orange');


var_dump(array_intersect_assoc($array1,$array2));
var_dump(array_intersect_assoc($array1,$array3));
于 2014-08-01T09:27:56.257 に答える