处理API中的单数组与多维数组


Handling Single vs Multidimensional array from API

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