我们有一个看起来像这样的数组
<?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
,结果应为实体 简而言之,无论用户传递什么,都会返回与之关联的键
但是当我们执行这个函数时,它返回''(空值)。
我们做错了什么?
答案 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;
}
}
}