Я использую инструкцию CURL в API, а затем передаю 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] => 2500001103245195815)
[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'];
}
Извините? Сделав еще один шаг
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>";
}
}
В подобной ситуации я конвертирую случай non-array в более общий и продолжаю универсальную логику, которая в обоих случаях является независимой и равной.
Таким образом, код намного легче читать и поддерживать.
Проверьте пример:
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
}