2012-08-13 61 views
2

假設我們有兩個數組:php數組與鍵和數組的鍵的區別?

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

凡$ B陣列表示陣列的按鍵美元對相鑑別。

,我們希望收到另一個數組$ 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) 

每個測試還採取萬次,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來做到這一點! :-)

回答

3

我只是代碼它想:

$c = $a; 
foreach ($b as $removeKey) { 
    unset($c[$removeKey]); 
} 
+0

這是一個不錯的 – Anonymous 2012-08-13 15:01:09

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) 

你會得到你預測的結果。

+0

這正是我張貼。期待在生產中出現一系列的空值是很荒謬的。 – Anonymous 2012-08-13 15:05:56

+0

不,不是,你發佈數組(1,3),這相當於數組(0 => 1,1 => 3);.您正在設置數組值而不是鍵。 – MarkR 2012-08-13 15:23:53

+0

@MarkR你錯了。這就是他所說的。 $ b的值是在$ a中比較的關鍵。他從未對$ b的鑰匙說過任何話。 – 2012-08-13 16:09:08

10
$c = array_diff_key($a, array_flip($b)); 
+0

哦,謝謝,這是一個非常可愛的線上人物!這對許多用戶很有用。 – Anonymous 2012-08-13 15:28:20

+0

這正是我所追求的 – AdRock 2016-03-15 13:47:35