繁体   English   中英

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

[英]extracting key from given array with “value”

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

<?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 ,结果应该是液体
  • 用户通过floor结果应该是可靠的

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

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

我们做错了什么?

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

$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

通过函数调用传递数组。

使用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"

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;
            }
        }
    }
?>

这是问题的另一种解决方案。 它使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;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM