PHP在多维数组中搜索键并返回值

时间:2013-10-24 11:27:31

标签: php associative-array

我有一个名为$ result

的数组

Array ( [0] => Array ( [location] => DNM Room (N) [maxdac] => 12.0 [mindac] => 2.0 [avgdac] => 7.00000 ) [1] => Array ( [location] => DNM Room (S) [maxdac] => 1.0 [mindac] => 1.0 [avgdac] => 1.00000 ) [2] => Array ( [location] => Feeder Cabinet (N) [maxdac] => 20.0 [mindac] => 20.0 [avgdac] => 20.00000 ) [3] => Array ( [location] => Feeder Cabinet (S) [maxdac] => 10.0 [mindac] => 10.0 [avgdac] => 10.00000 ) [4] => Array ( [location] => FM Vault (N) [maxdac] => 10.0 [mindac] => 10.0 [avgdac] => 10.00000 ) [5] => Array ( [location] => FM Vault (S) [maxdac] => 5.0 [mindac] => 5.0 [avgdac] => 5.00000 ) [6] => Array ( [location] => FMLCTA [maxdac] => 1.0 [mindac] => 1.0 [avgdac] => 1.00000 ) [7] => Array ( [location] => FMSA (N) [maxdac] => 2.0 [mindac] => 2.0 [avgdac] => 2.00000 ) [8] => Array ( [location] => FMSA (S) [maxdac] => 0.1 [mindac] => 0.1 [avgdac] => 0.10000 ) [9] => Array ( [location] => FPER [maxdac] => 3.0 [mindac] => 2.0 [avgdac] => 2.25000 ) [10] => Array ( [location] => FT Room (N) [maxdac] => 0.1 [mindac] => 0.1 [avgdac] => 0.10000 ) [11] => Array ( [location] => Moderator Room [maxdac] => 20.0 [mindac] => 7.0 [avgdac] => 14.25000 ) [12] => Array ( [location] => PAER [maxdac] => 2.0 [mindac] => 1.0 [avgdac] => 1.57500 ) [13] => Array ( [location] => Passage [maxdac] => 3.0 [mindac] => 1.0 [avgdac] => 1.62500 ) [14] => Array ( [location] => Pump Room [maxdac] => 35.0 [mindac] => 20.0 [avgdac] => 27.50000 ) [15] => Array ( [location] => RAB [maxdac] => 1.0 [mindac] => 1.0 [avgdac] => 1.00000 ) [16] => Array ( [location] => RB Sump [maxdac] => 0.1 [mindac] => 0.1 [avgdac] => 0.10000 ) [17] => Array ( [location] => SFSB [maxdac] => 0.0 [mindac] => 0.0 [avgdac] => 0.00000 ) [18] => Array ( [location] => West Passage [maxdac] => 3.0 [mindac] => 0.5 [avgdac] => 1.42500 ) )

我想在上面的数组中搜索[location] ='FPER'并获取key [maxdac]的值。尝试了几个选项,没有任何效果。不熟悉数组。任何方法

选中此选项

foreach ($array as $key => $value) {
if($value['location']=='FPER'){echo $value['maxdac'];}
}

我得到值3.0

是否可以在函数内部使用上述循环并获取不同位置的值?

例如

function getstat($location, $param){

foreach ($array as $key => $value) {
    if($value['location']==$location){return $value[$param];}
    }
}


$myvalue=getstat('FPER', 'maxdac');

echo $myvalue;

以上功能无效。似乎$ location和$ param在foreach中是未知的。

任何建议请

3 个答案:

答案 0 :(得分:0)

这是整个阵列吗? 如果是这样,一个简单的foreach()会不会很贵?

foreach($array as $tuple)
{
  if($tuple['location'] == "FPER")
    $value = $tuple['maxdac'];
  break;
}

答案 1 :(得分:0)

略有不同的方法。

<?php
$array = array(
    array('location' => 'FPER', 'maxdec' => rand(1, 10)),
    array('location' => 'ABCD', 'maxdac' => rand(1, 10)),
    array('location' => 'FPER', 'maxdec' => rand(1, 10)),
    array('location' => 'ABCD', 'maxdac' => rand(1, 10)),
    array('location' => 'FPER', 'maxdec' => rand(1, 10)),
    array('location' => 'ABCD', 'maxdac' => rand(1, 10)),
);

$filter = function($item) {
    return 'FPER' === $item['location'];
};

foreach (array_filter($array, $filter) as $key => $item) {
    printf("(%d) - %s\n", $key, $item['maxdec']);
}

答案 2 :(得分:0)

我自己解决了

function getstat($location, $param){
global $array;

foreach ($array as $key => $value) {

if($value['location']==$location){return $value[$param];}
}

}


echo getstat('FPER', 'maxdac');

得到的结果为3.0