2011-04-01 244 views
2

所以我有一個項目劈裂數組沒有的foreach

$arr1 = Array(266=>"foo",178=>"bar",3="foobar"); 

,然後數組我有一個數字陣列的這樣

$arr2 = Array(0 => 266, 1 => 178); 

所以我想要做的是分裂陣列一個成兩個陣列

其中$匹配$ ARR1的索引ARR2值被移動到一個新的數組,所以我留下了

$arr1 = Array(3="foobar"); 

$arr2= Array(266=>"foo",178=>"bar"); 

是說我知道我可以用一個foreach循環做到這一點,但我不知道這是否做到這一點

東西和array_diff是可以,但我不認爲這會工作更簡單,更快捷的方式

回答

2

嘗試:

$arr1 = array(266=>"foo",178=>"bar",3=>"foobar"); 
$arr2 = array(0 => 266, 1 => 178); 

$tmp = array_diff_key ($arr1, array_flip($arr2)); 
$arr2 = array_diff($arr1,$tmp); 
$arr1 = $tmp; 
+0

非常好,謝謝!該作品 – mcgrailm 2011-04-01 14:57:05

+0

+1,這比我的方法更簡單:) – 2011-04-04 07:15:54

0
$arr2=array_interest($arr1,array_flip($arr2)); 
$arr1=array_diff($arr1, $arr2); 
+0

致命錯誤:調用未定義功能array_interest() – mcgrailm 2011-04-01 14:51:19

+0

我想他可能意味着array_intersect。沒有測試,但它可以很好地工作:) – 2011-04-01 14:56:52

+0

@Berry Langerak,nolonger給了我的錯誤,但它沒有給出正確的結果 – mcgrailm 2011-04-01 15:15:05

0

這應該做你想要什麼:

<?php 
$arr1 = array( 
    266 => "foo", 
    178 => "bar", 
    3 => "foobar" 
); 

$arr2 = array(
    0 => 266, 
    1 => 178 
); 

$foo = array_filter( 
    array_flip($arr1), 
    function($key) use ($arr2) { 
     return in_array($key, $arr2); 
    } 
); 

var_dump(array_flip($foo)); 

兩個array_flip的是那裏,因爲array_filter將只需要值,而不是重點。實際上,我不太確定這是否比foreach更有效率,但你必須測試。

+0

確實給ARR2正確的結果,然後我想我會需要使用array_diff_assoc on arr1和arr2? – mcgrailm 2011-04-01 14:54:11