使用“value”从给定数组中提取键

时间:2016-05-16 07:16:27

标签: php arrays

我们有一个看起来像这样的数组

<?php
    $list = array(
        'liquid'=>array('water','soft drink'),
        'solid'=>array('car','computer','floor'),
        'gas'=>array('air','oxygen','carbon dioxide'),
    );
?>

现在这只是一个示例列表,我们想要实现的是

用户传递类似

的函数中的值
<?php
    function return_state($matter_value){
        return array_search($matter_value, $list);
    }
?>
  • 用户通过water,结果应为 liquid
  • 用户传递floor,结果应为实体
  

简而言之,无论用户传递什么,都会返回与之关联的

但是当我们执行这个函数时,它返回''(空值)。

我们做错了什么?

4 个答案:

答案 0 :(得分:2)

使用foreach进行in_array循环可以轻松实现。

$list = array(
        'liquid'=>array('water','soft drink'),
        'solid'=>array('car','computer','floor'),
        'gas'=>array('air','oxygen','carbon dioxide'),
    );
function return_state($matter_value, $list){    
    foreach($list as $key => $val){
        if(in_array($matter_value, $val))
            return $key;        
    }
    return 'Not found.';
}

echo return_state('floor', $list); //solid
  

通过函数调用传递数组。

答案 1 :(得分:1)

使用foreach循环和in_array函数:

function return_state($matter_value = ""){
    $list = [
        'liquid' => ['water','soft drink'],
        'solid' => ['car','computer','floor'],
        'gas' => ['air','oxygen','carbon dioxide'],
    ];
    if (!empty($matter_value)) {   // avoids empty arguments
        foreach ($list as $key => $items) {
            if (in_array($matter_value, $items)) {
                return $key;
            }
        }
    }
    return false;
}

print_r(return_state("water"));   // "liquid"
print_r(return_state("floor"));   // "solid"

答案 2 :(得分:0)

array_search无法在内部数组中找到。它将研究主阵列,即液体,固体,气体及其值(不是阵列)。你需要通过主数组的循环来搜索密钥。

<?php
    function return_state($matter_value,$list){
        foreach($list as $key=>$item){
            $test=array_search($matter_value, $item);
            if($test!==FALSE){
                return $key;
            }
        }
    }
?>

答案 3 :(得分:0)

这是问题的另一种解决方案。它使matter_value成为一个数组,并与$ list数组的每个元素相交。如果没有匹配,则结果将为 null

function return_state($matter_value, $list) {
    foreach ($list as $list_item_key => $list_item) {
        if ( ! empty(array_intersect([$matter_value], array_values($list_item)))) {
            return $list_item_key;
        }
    }
}