假设我们有两个数组:
$a=array('1'=>'Apple','2'=>'Microsoft',
'3'=>'Microapple','4'=>'Applesoft','5'=>'Softapple');
$b=array(1,3);
其中 $b 数组表示要区分的数组 $a 的键。
我们期望收到另一个数组 $c ,其值如下:
$c=array('2'=>'Microsoft','4'=>'Applesoft','5'=>'Softapple');
php手册中有两个函数:
array_diff($array1,$array2); //difference of values
array_diff_key($array1,$array2);//difference of keys
但以上两者都不适用于此。
我们应该做什么?
Edit
感谢大家的贡献。
我对两个预定义的数组执行了一些基准测试,如下所示:
for ($i=0; $i < 10000; $i++) { //add 10000 values
$a[]=mt_rand(0, 1000000); //just some random number as a value
}
for ($i=0; $i < 10000; $i++) { //add 10000 values as keys of a
$b[]=mt_rand(0, 1000);
} //randomly from 0 to 1000 (eg does not cover all the range of keys)
每个测试也进行了10000次,平均时间为Nanne
的解决方案是:
0.013398
和其中之一decereé
:
0.014865
这也很棒。
...与 in_array() 的其他建议不同,但是(该答案已删除):
foreach ($a as $key => $value)
if (!in_array($key, $b))
$c[$key] = $value;
以上平均做了2秒。显而易见,in_array() 必须循环遍历 $b 来检查该值是否存在。上面是一个很好的例子not
去做吧! :-)