-3

2つ以上の配列から珍しい値の配列を与えるPHPの関数はありますか?

例えば:

$array1 = array( "green", "red", "blue");
$array2 = array( "green", "yellow", "red");
....
$result = Function_Needed($array1, $array2,...);
print_r($result);

出力を与える必要があります:

array("blue", "yellow", ...);
4

4 に答える 4

7

使用array_diffarray_merge

$result = array_merge(array_diff($array1, $array2), array_diff($array2, $array1));

これがデモです。

複数の配列の場合は、コールバックと組み合わせてarray_reduce

function unique(&$a, $b) {
    return $a ? array_merge(array_diff($a, $b), array_diff($b, $a)) : $b;
}

$arrays = array(
    array('green', 'red', 'blue'),
    array('green', 'yellow', 'red')
);

$result = array_reduce($arrays, 'unique');

そして、これがそのデモです。

于 2012-07-07T01:26:29.390 に答える
2

試してみてくださいarray_diff</p>

于 2012-07-07T01:23:28.443 に答える
2
$result = array_diff($array1, $array2) + array_diff($array2, $array1);
于 2012-07-07T01:26:39.207 に答える
1

これでうまくいくはずです。3つ以上のアレイで動作するように拡張できます。基本的に、一般的なキーの出現回数をカウントし、カウントが1のキーの出現回数を返します。

$a = array('yellow', 'blue', 'red', 'green');
$b = array('blue', 'purple', 'green');

function unintersect($a, $b)
{
  $x = array_fill_keys($a, 1);
  foreach ($b as $v) {
    $x[$v]++; // this might trigger warning
  }
  return array_keys(array_filter($x, function($v) {
    return $v === 1;
  }));
}

print_r(unintersect($a, $b));

戻り値:

Array
(
    [0] => yellow
    [1] => red
    [2] => purple
)
于 2012-07-07T01:34:29.640 に答える