2

假设我们有两个数组:

$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

但以上都不适用于这里。

我们应该做什么?

编辑

感谢大家的贡献。

我对两个预定义的数组执行了一些基准测试,如下所示:

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以上是如何做到这一点的一个很好的例子!:-)

4

3 回答 3

11
$c = array_diff_key($a, array_flip($b));
于 2012-08-13T15:20:48.233 回答
3

我只是将其编码为:

$c = $a;
foreach ($b as $removeKey) {
    unset($c[$removeKey]);
}
于 2012-08-13T15:00:24.937 回答
0

您的数组 $b 不是设置数组键,而是设置值。

如果您要使用:

$a=array('1'=>'Apple','2'=>'Microsoft',
     '3'=>'Microapple','4'=>'Applesoft','5'=>'Softapple');
$b=array('1' => NULL ,'3' => NULL);
array_diff_key($a,$b)

你会得到你预测的结果。

于 2012-08-13T15:04:29.243 回答