2014-09-02 45 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; 
}