PHP for each 在 API 调用中显示国家/地区名称


PHP foreach display country name in API Call

我正在使用经销商面板API来解决以下问题。(文档)

我有一个 Curl 脚本,里面有一个 foreach。这是从经销商面板 API 获取国家/地区列表。

function getCountries() {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "myapiurl");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, POST);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $final = curl_exec($ch);
    $result = explode(" ", $final);
        echo '<select>';
        foreach ($result as $country => $name) {
            echo '<option>'.$country. '</option>';
        }
        echo '</select>';
    curl_close($ch);
}

上面的代码导致:

<select> 
   <option>1</option>
   <option>2</option>
</select>

所列所有114个国家/地区都继续这样做。我觉得没有必要在这里放置所有 114 个选项。

看起来好像 foreach 只是计算卷曲的每个结果并将其发布到选择中。我如何让它真正呼出国家名称而不仅仅是计数?

在原始形式中,API 的结果如下所示:例如,仅列出一个国家/地区。

<ampa>
  <command>"0"
  <error_code>0</error_code>
  <countries>
    <n0>
      <name>Afghanistan</name>
      <iso2>AF</iso2>
      <phone_code>93</phone_code>
    </n0>
 </countries>
</ampa>

更新

我尝试了echo '<option value="'.$country.'">'.$name. '</option>';,结果如下:

<option value="0">
0
0
56000

        Afghanistan
        AF
        93

        Albania
        AL
        355

        Algeria
        DZ
        213

        American</option>

当我回显$final时,我收到这个(简而言之):

0 0 56000 Afghanistan AF 93 Albania AL 355 Algeria DZ 213 American Samoa AS 684 Andorra AD 376 Angola AO 244 Anguilla AI 1 Antarctica AQ 672 AG 1 Argentina AR 54 Armenia AM 374 Aruba AW 297 Australia AU 61 Austria AT 1 0 0.2 43

我希望能够使用 foreach 语句在选择中回显国家/地区名称。

前任:

<select>
 <option>United States</option>
</select>

我认为你错误地爆炸了字符串。你的是爆炸" ",空字符串。但是根据您的返回,我假设它是XML节点格式。如果您打印出所有内容,它会显示所有节点信息,但您只需要<name>Afghanistan</name>。尝试用户simplexml_load_string,是一个php函数。simplexml_load_string中的示例。因此,您可以直接访问name节点。希望这有帮助。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "myapiurl");
curl_setopt($ch, CURLOPT_POST, 1);
# curl_setopt($ch, CURLOPT_POSTFIELDS, POST);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$final = curl_exec($ch);
$domd = new DOMDocument();
$domd->loadXML($final);
$countries = $domd->getElementsByTagName('countries')->item(0)->childNodes;
echo '<select>';
foreach($countries AS $country){
    // the following is just to make sure we only get tags with the name "n'd+"
    if(preg_match('/n'd+/', $country->tagName)){
        $name = $country->getElementsByTagName('name');
        // to make sure there's a sub-tag named "name"
        if($name->length!=1) continue;
        echo '<option value="'.$country->tagName.'">'
        .$name->item(0)->nodeValue.'</option>';
    }
}
echo '</select>';

我注释掉的curl_setopt行毫无意义,应该给你一个警告或错误。POST 应该是一个带有 post 值的长字符串,就像 url 中的 get 值一样。变量 1=值 1&变量 2=值 2&变量 3 = 值 3 等这用于向服务器发送特定的"呼叫",也许它会为您提供不同的输出,例如仅几个国家而不是所有国家。

您也可以按照 Steven 的建议使用 simplexml。这几乎是一回事。