如何从预定义的数组中搜索多个键?

时间:2014-09-02 13:58:03

标签: php arrays

我在key => value

中有预定义的类别数组
$all_categories = array (
                    1 => 'friends',
                    2 => 'family',
                    3 => 'personal',
                    4 => 'public'
);

我有这样的新小数组,只有values

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

现在我如何从$all_categories数组获取值为$searched_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;
}

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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 )

答案 2 :(得分:0)

array_search正在执行此任务,但是您一直擦除数组并添加$ key,无论它是否与array_search中的false相等:

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