php数组与数组键和键数组的区别?

Ano*_*ous 2 php arrays performance array-key

假设我们有两个数组:

$a=array('1'=>'Apple','2'=>'Microsoft',
         '3'=>'Microapple','4'=>'Applesoft','5'=>'Softapple');
$b=array(1,3);
Run Code Online (Sandbox Code Playgroud)

其中$ b数组表示要区分的数组$ a的键.

我们希望使用以下值接收另一个数组$ c:

$c=array('2'=>'Microsoft','4'=>'Applesoft','5'=>'Softapple');
Run Code Online (Sandbox Code Playgroud)

在php手册中有两个功能:

array_diff($array1,$array2);    //difference of values
array_diff_key($array1,$array2);//difference of keys
Run Code Online (Sandbox Code Playgroud)

但以上都不适用于此.

我们应该做什么?

编辑

谢谢大家的贡献.

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

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)
Run Code Online (Sandbox Code Playgroud)

每次测试也进行了10000次,平均Nanne解决时间为:

0.013398

以下之一decereé:

0.014865

这也很棒.

...与in_array()的其他一些建议不同但是(答案被删除):

foreach ($a as $key => $value)
if (!in_array($key, $b)) 
$c[$key] = $value;
Run Code Online (Sandbox Code Playgroud)

上面平均做了2秒.由于显而易见的原因,in_array()必须循环遍历$ b以检查该值是否存在.以上是如何not做到的一个很好的例子!:-)

dec*_*eze 11

$c = array_diff_key($a, array_flip($b));
Run Code Online (Sandbox Code Playgroud)