搜索多维数组并将键指定为变量

时间:2014-02-11 15:00:36

标签: php arrays

我有一个数组和一个数字,分配给变量$cat

$categories_array = array(
    "Belts" => array(131),
    "Headwear" => array(171,172,185,186),
    "ScarvesAndGloves" => array(166,173,184)
);

如果$cat为171,我希望$categoryHeadwear

我看过array_search但它似乎不适用于多维数组。我在网站上找到的所有解决方案似乎都依赖于子阵列中每个条目的密钥。我只想将键的名称分配给变量(如果它出现在数组中)。没有重复。

可以用这种格式实现,还是应该重构这个数组?有没有更好的方法来实现这个结果?

4 个答案:

答案 0 :(得分:1)

我没有发现您的阵列存在问题。

这是我搜索数组的方式:

$cat = 171; 
$category = '';

$categories_array = array(
  "Belts" => array(131),
  "Headwear" => array(171,172,185,186),
  "ScarvesAndGloves" => array(166,173,184)
);

foreach($categories_array as $category_name => $categories) {
  if(in_array($cat, $categories)) {
    $category = $category_name;
  }
}

echo "You have chosen: $category"; 

答案 1 :(得分:1)

以下代码将成为解决您问题的众多解决方案之一:

$cat = 171;
$category = '';

foreach ($categories_array as $k => $v) {
    if (false !== array_search($cat, $v)) {
        $category = $k;
    }
}

echo $category;

答案 2 :(得分:1)

我的答案与上面几乎相似,只是添加了一个中断,所以如果你已经得到了结果,那么就不需要继续循环了。如果数组太大,效率会很高。

$cat              = 171;
$categories_array = array (
    "Belts"            => array (131),
    "Headwear"         => array (171, 172, 185, 186),
    "ScarvesAndGloves" => array (166, 173, 184)
);

echo getaName($categories_array, $cat);


function getaName($array, $searchKey) {
    $name = '';
    foreach($array as $key => $val) {
        if(in_array($searchKey, $val)){
            $name = $key;
            break;
        }
    }
    return $name;
}

答案 3 :(得分:0)

尝试:

<?php
    function getvalue($cat){
       foreach($categories_array as $categorie =>$list){
          if(in_array($cat,$list))
             return $categorie;
        }
       return false
     }
?>