在航班预订网站上工作。有一个包含机场代码,城市名称和国家名称的json
文件。
[{"iata":"UTK","lon":"169.86667","iso":"MH","status":1,"name":"Utirik Airport","continent":"OC","type":"airport","lat":"11.233333","size":"small"}]
现在,如果我的iata
机场代码与UTK
匹配,我想返回名称。
使用 filter() 通过iata
查找Array
中的对象:
var arr = [{"iata":"UTK","lon":"169.86667","iso":"MH","status":1,"name":"Utirik Airport","continent":"OC","type":"airport","lat":"11.233333","size":"small"}];
function findByCode(arr, iata){
var filtered = arr.filter(function(e){return e.iata = iata});
return (filtered.length == 1) ? filtered[0]:undefined;
}
console.log(findByCode(arr,"UTK").name);
JS小提琴:http://jsfiddle.net/dE9nP/
$string = '[{"iata":"UTK","lon":"169.86667","iso":"MH","status":1,"name":"Utirik Airport","continent":"OC","type":"airport","lat":"11.233333","size":"small"}]';
$data = json_decode($string);
echo count($data);
for($i=0;$i<count($data);$i++){
if($data[$i]->iata == 'UTK') echo $data[$i]->name;
}
如果数据在文件中,您可以使用file_get_contents而不是$string;
这是基本的搜索!您需要遍历数组,并检查每个项目是否有匹配的代码,然后返回结果。这是一个函数:
function findAirport(myArray, iata){
for(var i = 0; i < myArray.length; i++){
var item = myArray[i];
if(item["iata"] === iata){
return item;
}
}
return null;
}
您可以像这样使用该函数:
var airports = [{"iata":"UTK","lon":"169.86667","iso":"MH","status":1,"name":"Utirik Airport","continent":"OC","type":"airport","lat":"11.233333","size":"small"}];
var match = findAirport(airports, "UTK");
if(match){
console.log("name = " + match.name);
}
只是为了强调我更喜欢使用简单的 for 循环而不是其他函数,例如 filter
,这是一个性能测试,将我的答案与另一个使用 filter
的答案进行比较。我知道这在大多数实际用例中毫无意义,但我想保留对 jsperf 链接的引用:)
注意:此答案是在编辑问题标签之前提供的。在发布时,这个问题要求一个javascript解决方案