Обработка одиночного и многомерного массива из API

0

Я использую инструкцию 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'];
}
Теги:
arrays
curl
multidimensional-array

2 ответа

0

Извините? Сделав еще один шаг

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 "&nbsp;" . "Line Item Id: " .  $LineItemId . "<br/>";
        }
    } else {
        $LineItemId = $value["LineItems"]["LineItem"]["LineItemId"];
        echo "&nbsp;" . "Line Item Id: " .  $LineItemId . "<br/></p>";
    }
}
0

В подобной ситуации я конвертирую случай 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
}
  • 0
    Спасибо, что работает, но как насчет этого:
  • 0
    @ Дэн Как насчет чего?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню