2014-09-02 41 views
0

我有類別這樣的預定陣列中的一對key => value如何從預定義數組中搜索多個鍵?

$all_categories = array (
        1 => 'friends', 
        2 => 'family', 
        3 => 'personal', 
        4 => 'public' 
); 

和我有新的小型陣列這樣其僅僅values

$searched_categories = array('family','public'); 

現在,我怎樣才能得到其值$searched_categories$all_categories陣的鑰匙?

我想這樣

$output_array = array(2,4); 

輸出我可以用array_search得到單鍵但有一個預置的功能呢?或者我必須創建一個循環到array_search我擁有的所有值?


這是實現此目的的正確方法嗎?

$output_array = array(); 
foreach ($searched_categories as $value){ 
    $key = array_search($value, $all_categories); 
    $output_array = $key; 
} 
+1

使用循環並繼續下一個問題! – user3791372 2014-09-02 14:04:15

回答

4
$all_categories = array (1 => 'friends', 2 => 'family', 3 => 'personal', 4 => 'public'); 

$searched_categories = array('family','public'); 

$output_array = array_keys(
    array_intersect(
     $all_categories, 
     $searched_categories 
    ) 
); 
var_dump($output_array); 
+0

是否有任何理由使用這個而不是array_search?更小的複雜性可能? – Sugar 2014-09-02 14:11:40

+0

更簡單,因爲你不需要循環,只需要使用兩個內置函數,不需要進行if if測試,所以也可能在微觀上更快。 – 2014-09-02 14:13:10

+0

是的,我注意到在同一時間if檢查問你。 :) – Sugar 2014-09-02 14:14:34

0

你可以使用foreach循環和in_array

foreach($all_categories as $key => $category){ //loop through your categories array 
    if(in_array($category, $searched_categories)){ //check if category is in searched_catgories 
     $output_array[] = $key; //if category is there, then save the key to your new array 
    } 
} 

print_r($output_array);會給你Array ([0] => 2 [1] => 4)

0

array_search正在做的工作,但你擦除陣列中的所有的時間和不顧事實加上$鍵也可能是從array_search等於假:

foreach ($searched_categories as $value){ 
    $key = array_search($value, $all_categories); 
    if ($key !== false) 
    $output_array[] = $key; 
}