我正在使用经销商面板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。这几乎是一回事。