Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查找JSON文件是否包含字符串并返回机场名称_Php_Json - Fatal编程技术网

Php 查找JSON文件是否包含字符串并返回机场名称

Php 查找JSON文件是否包含字符串并返回机场名称,php,json,Php,Json,我有一个相当大的JSON文件,其中包含机场及其各自信息的完整列表(总共46000行) 我希望能够检查JSON文件是否包含ICAO,然后在变量中返回机场名称 理想情况下是这样的(仅作为示例) JSON摘录: 例子: 如果我输入ICAOYARY我会得到机场名称Arrabury airport 个人尝试: 到目前为止,我已经成功地将所有json数据打印到一个网页中,如下所示: 使用以下代码: 国际航空运输协会代码 国际民航组织守则 机场名称 位置 城市 国家 但我不知道从这里到哪里去 谢谢。这是

我有一个相当大的JSON文件,其中包含机场及其各自信息的完整列表(总共46000行)

我希望能够检查JSON文件是否包含ICAO,然后在变量中返回机场名称

理想情况下是这样的(仅作为示例)

JSON摘录: 例子: 如果我输入ICAO
YARY
我会得到机场名称
Arrabury airport

个人尝试: 到目前为止,我已经成功地将所有json数据打印到一个网页中,如下所示:

使用以下代码:

国际航空运输协会代码
国际民航组织守则
机场名称
位置
城市
国家
但我不知道从这里到哪里去

谢谢。

这是我的解决方案:

$condition='YARY';
$airports=array_过滤器($ARRAYdatas,函数($item)使用(&$condition){
返回isset($item->icao_代码)&&&$item->icao_代码==$condition;
});
$airport=array\u pop($airports);
$airportName=$airport$机场->机场名称:“”;
可能有一个更优雅或更快的解决方案,但我认为这样做很容易实现您的目标。

以下是我的解决方案:

$condition='YARY';
$airports=array_过滤器($ARRAYdatas,函数($item)使用(&$condition){
返回isset($item->icao_代码)&&&$item->icao_代码==$condition;
});
$airport=array\u pop($airports);
$airportName=$airport$机场->机场名称:“”;

可能有一种更优雅或更快的解决方案,但我认为通过这种方式,实现您的目标非常容易。

如果您熟悉回调,也可以使用:

function isICAO($Icao = NULL, $_json = array())
{
    array_walk($_json, function($item, $key) use($Icao){
        if($item->icao_code == $Icao) { echo $item->airport_name; }
    });
}
// Print Airport name if icao_code is found. Else nothing.
echo isICAO("NTGA", $_json);
回拨前的老路

<?php
function isICAO($Icao = NULL, $_json = array())
{
    foreach ($_json as $key => $item)
    {
        if($item->icao_code == $Icao) 
        {
            return $item->airport_name;
        }
    }
    return false;
}

if($Airport = isICAO("NTGA", $_json))
{
    echo $Airport;
}
else
{
    echo "Sorry, that ICAO could not be found";
}
?>

Javascript代码:

var json=[
{
“完整位置”:“阿纳、图阿莫图、法属波利尼西亚”,
“iata_代码”:“AAA”,
“城市”:“阿纳”,
“国际民航组织代码”:“NTGA”,
“国家”:“法属波利尼西亚”,
“机场名称”:“安那机场”
},
{
“完整位置”:“澳大利亚昆士兰阿拉伯里”,
“iata_代码”:“AAB”,
“城市”:“阿拉伯里”,
“国际民航组织代码”:“YARY”,
“国家”:“澳大利亚”,
“机场名称”:“阿拉伯里机场”
},
{
“完整位置”:“埃及埃尔阿里什”,
“iata_代码”:“AAC”,
“城市”:“埃尔阿里什”,
“国际民航组织代码”:“听到”,
“国家”:“埃及”,
“机场名称”:“埃尔阿里什国际机场”
}
];
国际民航组织的职能
{
var结果=[];
map(函数(值、索引){
如果(value.icao_code==icao){result.push(value);}
});
返回结果;
}
console.log(isICAO('HEAR'));

如果您熟悉回调,还可以使用:

function isICAO($Icao = NULL, $_json = array())
{
    array_walk($_json, function($item, $key) use($Icao){
        if($item->icao_code == $Icao) { echo $item->airport_name; }
    });
}
// Print Airport name if icao_code is found. Else nothing.
echo isICAO("NTGA", $_json);
回拨前的老路

<?php
function isICAO($Icao = NULL, $_json = array())
{
    foreach ($_json as $key => $item)
    {
        if($item->icao_code == $Icao) 
        {
            return $item->airport_name;
        }
    }
    return false;
}

if($Airport = isICAO("NTGA", $_json))
{
    echo $Airport;
}
else
{
    echo "Sorry, that ICAO could not be found";
}
?>

Javascript代码:

var json=[
{
“完整位置”:“阿纳、图阿莫图、法属波利尼西亚”,
“iata_代码”:“AAA”,
“城市”:“阿纳”,
“国际民航组织代码”:“NTGA”,
“国家”:“法属波利尼西亚”,
“机场名称”:“安那机场”
},
{
“完整位置”:“澳大利亚昆士兰阿拉伯里”,
“iata_代码”:“AAB”,
“城市”:“阿拉伯里”,
“国际民航组织代码”:“YARY”,
“国家”:“澳大利亚”,
“机场名称”:“阿拉伯里机场”
},
{
“完整位置”:“埃及埃尔阿里什”,
“iata_代码”:“AAC”,
“城市”:“埃尔阿里什”,
“国际民航组织代码”:“听到”,
“国家”:“埃及”,
“机场名称”:“埃尔阿里什国际机场”
}
];
国际民航组织的职能
{
var结果=[];
map(函数(值、索引){
如果(value.icao_code==icao){result.push(value);}
});
返回结果;
}
console.log(isICAO('HEAR'));

如果您希望获得一些性能提升,那么最好将
json\u decode()
输出缓存为本机PHP格式,并包含该文件。假设在每个页面加载中都包含.json文件。(使用
var_export()
将数据转储为PHP可读格式。)

如果您希望获得一些性能提升,那么最好将
json_decode()
输出缓存为本机PHP格式,并包含该文件。假设在每个页面加载中都包含.json文件。(使用
var_export()
将数据转储为PHP可读格式。)

谢谢,但这不是我需要的。我在找一些东西来返回国际民航组织的机场名称。谢谢,但这不是我需要的。我在寻找一些东西来返回国际民航组织的机场名称。这听起来像是一个有用的改变。你能把它放在上下文中吗?谢谢。您可能需要一个单独的解析器脚本,从中获取JSON文件的内容并将其解析为一个数组(就像您现在在脚本开头所做的那样)。解析器将数组保存到一个文件中
file\u put\u contents()
等(请确保在
var\u export
中的数组数据前面加上变量名和PHP open标记)。然后,在主文件中,代替每次解释JSON,只需将该文件与已解析的PHP数组一起包含。每当数据更新时,您只需运行JSON解析器一次。这是否提供了足够的上下文?为了便于查找,循环JSON数据并使用机场代码作为数组键将其转换为关联数组也很有用。然后你所需要做的就是
if(isset($airports[$icao_code]){echo$airports[$icao_code]['airport_name'];}
左右,避免你在每次查询时过滤或迭代整个数组。这听起来是一个有用的改变。你能把它放在上下文中吗?谢谢。你可能想要一个单独的解析器
<?php
function isICAO($Icao = NULL, $_json = array())
{
    foreach ($_json as $key => $item)
    {
        if($item->icao_code == $Icao) 
        {
            return $item->airport_name;
        }
    }
    return false;
}

if($Airport = isICAO("NTGA", $_json))
{
    echo $Airport;
}
else
{
    echo "Sorry, that ICAO could not be found";
}
?>
var json = [
    {
        "complete_location": "Anaa, Tuamotus, French Polynesia",
        "iata_code": "AAA",
        "city": "Anaa",
        "icao_code": "NTGA",
        "country": " French Polynesia",
        "airport_name": "Anaa Airport"
    },
    {
        "complete_location": "Arrabury, Queensland, Australia",
        "iata_code": "AAB",
        "city": "Arrabury",
        "icao_code": "YARY",
        "country": " Australia",
        "airport_name": "Arrabury Airport"
    },
    {
        "complete_location": "El Arish, Egypt",
        "iata_code": "AAC",
        "city": "El Arish",
        "icao_code": "HEAR",
        "country": " Egypt",
        "airport_name": "El Arish International Airport"
    }
];

function isICAO(Icao)
{
    var result = [];
    json.map(function(value, index) {
        if(value.icao_code == Icao) { result.push(value); }
    });
    return result;
}

console.log(isICAO('HEAR'));

</script>