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文件,其中包含所有国家及其城市和州的所有列表。该文件具有此结构 "NO": { "name": "Norway", "states": { "VA": { "name": "Vest-Agder" }, "RO": { "name": "Rogaland" }, "HO": { "name": "Hordaland" }, "SF": { "name": "Sogn og Fjordane" }, "MR":

我有一个JSON文件,其中包含所有国家及其城市和州的所有列表。该文件具有此结构

  "NO": {
"name": "Norway",
"states": {
  "VA": {
    "name": "Vest-Agder"
  },
  "RO": {
    "name": "Rogaland"
  },
  "HO": {
    "name": "Hordaland"
  },
  "SF": {
    "name": "Sogn og Fjordane"
  },
  "MR": {
    "name": "Møre og Romsdal"
  },
  "ST": {
    "name": "Sør-Trøndelag"
  },
  "NO": {
    "name": "Nord-Trøndelag"
  },
  "NT": {
    "name": "Nordland"
  },
  "TR": {
    "name": "Troms"
  },
  "FI": {
    "name": "Finnmark"
  },
  "SJ": {
    "name": "Svalbard"
  },
  "SJ": {
    "name": "Jan Mayen"
  },
  "AK": {
    "name": "Akershus"
  },
  "AA": {
    "name": "Aust-Agder"
  },
  "BU": {
    "name": "Buskerud"
  },
  "HE": {
    "name": "Hedmark"
  },
  "OP": {
    "name": "Oppland"
  },
  "OS": {
    "name": "Oslo"
  },
  "TE": {
    "name": "Telemark"
  },
  "VF": {
    "name": "Vestfold"
  },
  "OF": {
    "name": "Østfold"
  }
}
},

我试图实现的是,当用户在输入字段中输入全名时,获取状态的短名称。例如,如果他们加入奥斯陆,我将在输出中得到奥斯陆

这是我提出的代码,但我没有得到输出

     $jsonitem = file_get_contents("countries-info.json");
 $objitems = json_decode($jsonitem);
$findByname = function($name) use ($objitems) {
    foreach ($objitems as $friend) {
        if ($friend->name == $name) return $friend->state;
     }

    return false;
};
echo $findByname($_GET[code]) ?: 'No record found.';

需要建议

查看JSON的结构,您应该循环$objitems->NO->states$objitems将包含完整的对象,您只需要状态

foreach ($objitems as $state => $friend) {
    if ($friend->name == $name) return $state;
 }
因此,您需要将foreach更改为:


查看JSON的结构,您应该循环$objitems->NO->states$objitems将包含完整的对象,您只需要状态

因此,您需要将foreach更改为:


它有效吗?你只是想要一个更快的算法吗?@davidev不,我正在尝试的代码无效。你有什么建议要修复吗?或者像你说的那样,有没有改进的更快的方法来获得所需的输出?如果它能工作,你只是想要一个更快的算法吗?@davidev没有,我正在尝试的代码不起作用。您是否有任何建议要修复,或者像您所说的,是否有任何改进的更快的方式来获得所需的输出您的代码在发送全名奥斯陆的情况下不起作用。它给出了国家短代码的输出,就像当我发送挪威时,我得到的是NO作为输出。我需要的是获取州的短名称,例如我传递Oslo并将OS作为输出。如果发送完整的州名称Oslo,则必须按照相同的逻辑循环状态。您的代码不起作用。它给出了国家短代码的输出,就像当我发送挪威时,我得到的是NO作为输出。我需要的是得到状态的简短名称,例如我通过Oslo并得到OS作为输出,然后你必须按照相同的逻辑循环状态。谢谢你,伙计,这正是我所想的,但无法编写代码。你的解决方案解决了我的问题:很高兴我能帮上忙谢谢你,伙计,这正是我当时的想法,但无法编写代码。你的解决方案解决了我的问题:很高兴我能帮忙
 foreach ($objitems->NO->states as $short => $state) {
    if ($state->name == $name) return $short;
 }