我在API上使用CURL语句,然后将xml提供给一个数组,该数组有时返回多维数组,有时不返回。
function api_query($url) {
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($curl);
return $result;
}
function xml_to_string($results) {
// Store XML String in Array
$xml = simplexml_load_string($results);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
return $array;
}
示例:阵列([结果]=>数组([订单]=>阵列([订单]=>阵列([0]=>数组([OrderId]=>2500000103245195815)
[1] => Array(
[OrderId] => 2500001099767553054)
)
)
)
)
Array (
[Result] => Array(
[Orders] => Array(
[Order] => Array(
[OrderId] => 2500001103245195815
)
)
)
)
我可以用什么来代替这样的if语句:
if(isset($array["Result"]["Orders"]['Order'][0])) {
$arrlength = count($array["Result"]["Orders"]['Order']);
for ($row = 0; $row < $arrlength; $row++) {
$OrderId = $array["Result"]["Orders"]['Order'][$row]['OrderId'];
}
} elseif(if(isset($array["Result"]["Orders"]['Order'])) {
$OrderId = $array["Result"]["Orders"]['Order']['OrderId'];
}
在类似的情况下,我将非数组情况转换为更通用的情况,并继续使用在这两种情况下独立且相等的通用逻辑
通过这种方式,代码更易于阅读和支持。
查看示例:
if (is_array($array["Result"]["Orders"]['Order'])) {
$tmpArr = $array["Result"]["Orders"]['Order'];
} else {
$tmpArr[0]['OrderId'] = $array["Result"]["Orders"]['Order'];
}
// Single logic processing
foreach ($tmpArr as $value)
$OrderId = $value['OrderId'];
// Do something with the $OrderId
}
对不起?更进一步
foreach ($tmpArr as $value) {
$OrderId = $value['OrderId'];
// Do something with the $OrderId
echo "Order Id: " . $OrderId . "<br/>";
if(isset($value["LineItems"]["LineItem"][0])) {
$itemslength=count($value["LineItems"]["LineItem"]);
for ($item = 0; $item < $itemslength; $item++) {
$LineItemId = $value["LineItems"]["LineItem"][$item]["LineItemId"];
echo " " . "Line Item Id: " . $LineItemId . "<br/>";
}
} else {
$LineItemId = $value["LineItems"]["LineItem"]["LineItemId"];
echo " " . "Line Item Id: " . $LineItemId . "<br/></p>";
}
}