PHP比较数组元素作为一个整体

时间:2016-10-19 02:05:43

标签: php arrays algorithm

例如,我有两个数组,

$arrayA = [0=>"A", 1=>"B", 2=>"C", 3=>"C", 4=>"E", 5=>"F"];
$arrayB = [0=>"B", 1=>"C"];

如果我使用array_intersect()

$same = array_intersect($arrayA, $arrayB);

我会得到$same

的结果
1 => B
2 => C
3 => C

相反,我想要实现的只是获得

1 => B
2 => C

更新

在尝试 amow Ekin 提供的答案后,我意识到这种方法存在局限性。如果我的数组是以下形式,

$arrayA = [0=>"A", 1=>"B", 2=>"C", 3=>"B", 4=>"C", 5=>"E", 6=>"F"];
$arrayB = [0=>"B", 1=>"C", 2=>"B", 3=>"C"];
$same = array_unique(array_intersect($arrayA, $arrayB));

$same的结果仍然是

1 => B,
2 => C

我希望得到

1 => B,
2 => C,
3 => B,
4 => C

3 个答案:

答案 0 :(得分:2)

2
希望这可以提供帮助。

array_unique doc

更新解决方案:

array_intersect(array_unique($arrayA),array_unique($arrayB))

答案 1 :(得分:2)

上面的确如此,你也可以在array_unique()中包装相交。像:

$arrayA = [0=>"A", 1=>"B", 2=>"C", 3=>"C", 4=>"E", 5=>"F"];
$arrayB = [0=>"B", 1=>"C"];
$same = array_unique(array_intersect($arrayA, $arrayB));

print_r($same);

# Array ( [1] => B [2] => C )

答案 2 :(得分:0)

$arrayA = [0=>"A", 1=>"B", 2=>"C", 3=>"C", 4=>"E", 5=>"F"];
$arrayB = [0=>"B", 1=>"C"];
$result = array();

foreach ($arrayB as $key => $value) {
   if($key = array_search($value, $arrayA)){
   $result[$key] = $arrayA[$key];
   }
}

print_r($result);

你会得到:

Array ( [1] => B [2] => C )