2014-02-06 24 views
1

我有兩個數組:從關聯中刪除某些鍵。陣列

$pool = array(
    'foo' => array('foobar1'), 
    'bar' => array('foobar2'), 
    'lou' => array('foobar3'), 
    'zuu' => array('foobar4') 
); 

$remove = array('lou', 'zuu'); 

我如何得到這個數組:

$result = array(
    'foo' => array('foobar1'), 
    'bar' => array('foobar2') 
); 

我可以做一個foreach循環,但我喜歡像

$result = array_intersect_key($pool, array_flip($remove)); 

一個更優雅的解決方案這給了我另一種方式:

array(
    'lou' => array('foobar3'), 
    'zuu' => array('foobar4') 
); 

EDIT:我的一條線的解決方案是:

array_intersect_key($pool, array_flip(array_keys(array_diff_key($pool, array_flip($remove))))) 

回答

3

試試這個,然後

$pool = array(
    'foo' => array('foobar1'), 
    'bar' => array('foobar2'), 
    'lou' => array('foobar3'), 
    'zuu' => array('foobar4') 
); 

$remove = array('lou', 'zuu'); 
$compare=array_diff_key($pool, array_flip($remove)); 
var_dump(array_intersect_key($pool,$compare)); 
+0

這就需要一個循環,如前所述我更喜歡不同的解決方案 – Xaver

+0

更新了我的答案:) –

+0

喜歡它!在一行中它的'array_intersect_key($ pool,array_flip(array_keys(array_diff_key($ pool,array_flip($ remove)))))' – Xaver

1

使用http://bg2.php.net/array_diff_key

體必須至少爲30個字符;您輸入4.

+0

例子嗎? 'array_diff_key($ pool,$ remove)'或'array_diff_key($ remove,$ pool)'不起作用 – Xaver

+0

看文檔中的例子 $ array1 = array('blue'=> 1,'red'=> 2 ,'綠色'=> 3,'紫色'=> 4);數組('綠'=> 5,'藍'=> 6,'黃'=> 7,'青'=> 8); var_dump(array_diff_key($ array1,$ array2)); –

2

使用未設置功能

unset($pool['lou']);