【问题标题】:Handling Single vs Multidimensional array from API从 API 处理单维数组和多维数组
【发布时间】:2014-11-05 22:52:11
【问题描述】:

我在 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] => 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'];
}

【问题讨论】:

    标签: php arrays api curl multidimensional-array


    【解决方案1】:

    在类似的情况下,我将非数组情况转换为更通用的情况,并继续使用在这两种情况下独立且相等的通用逻辑。
    这样代码更容易阅读和支持。

    查看示例:

    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
    }
    

    【讨论】:

    • @Dan 怎么样?
    【解决方案2】:

    对不起?更进一步

    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>";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      • 2018-11-27
      • 2014-07-13
      • 2019-08-22
      相关资源
      最近更新 更多