【问题标题】:How count value of an attribute on different json pages using php如何使用php计算不同json页面上的属性值
【发布时间】:2018-09-28 19:56:04
【问题描述】:

我是php初学者

我有这个问题:

我需要加起来每次销售一个json的总价值,但它是分页的!因此,我必须添加每个页面的总销售额

示例:

- 在第 1 页:我有 100 个订单,每个订单价值 10 美元,在此页面中我的总价值为 1000。

- 在第 2 页:我有 50 个订单,价格为 10 美元,因此在此页面中总共有 500 个雷亚尔

现在我需要加上这两页的总和

这是 api 网址。

$url = 'https://bling.com.br/Api/v2/pedidos/page=1/' . $outputType  . '/?'  . $dataEmissao;



$return = executeGetOrder($url, $apikey);


$obj = json_decode($return);
$subItem = $obj->return->orders;

$total = 0;


for($i = 0; $i < count($subItem); $i++) {
    $total += $subItem[$i]->orders->totalSale;
}

重要的是要记住每个页面只显示 100 个订单,有时我的第一页有 100 个订单,而第二页有。

函数执行GetOrder

function executeGetOrder($url, $apikey){
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url . '&apikey=' . $apikey);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($curl_handle);
curl_close($curl_handle);
return $response;

}

【问题讨论】:

  • 你知道总页数吗?
  • 当您有 500 个订单(5 页)时会发生什么?这是否意味着第 1 页将有前 100 个订单的总和,而第 2 页有前 200 个订单的总和(即第 1 页和第 2 页)......而第 5 页将有所有 500 个订单的总数?
  • 不知道总页数:(

标签: php arrays json multidimensional-array


【解决方案1】:

如果您没有总页数的信息,您可以执行以下操作:

$page = 1;
$grandTotal = 0;

while ($return = executeGetOrder('https://bling.com.br/Api/v2/pedidos/page=' . $page . '/' . $outputType  . '/?'  . $dataEmissao, $apikey)) {
    $obj = json_decode($return);
    $subItem = $obj->return->orders;

    $total = 0;

    for ($i = 0; $i < count($subItem); $i++) {
        $total += $subItem[$i]->orders->totalSale;
    }

    $grandTotal += $total;
    $page ++;
}

然后重要的是,当您的executeGetOrder 函数发送 HTTP 请求并发现该页面不存在时,它将返回 falsenull

  • 想法:您可以在循环中添加一个条件,以避免在最后一页的订单数少于其余页面的大多数情况下出现不必要的请求。例如,如果您每页有 100 个订单,您可以添加 &amp;&amp; $grandTotal % 100 == 0

如果你知道总页数,那么你最好做一个for循环:(避免不必要的请求):

$totalPages = ?;
$grandTotal = 0;

for ($page = 1; $page <= $totalPages; $page ++) {
    $return = executeGetOrder('https://bling.com.br/Api/v2/pedidos/page=' . $page . '/' . $outputType  . '/?'  . $dataEmissao, $apikey)
    $obj = json_decode($return);
    $subItem = $obj->return->orders;

    $total = 0;

    for ($i = 0; $i < count($subItem); $i++) {
        $total += $subItem[$i]->orders->totalSale;
    }

    $grandTotal += $total;
}

【讨论】:

  • 嗨!我使用了while,但是出现了一个新问题,就是$subItem = $obj->return->orders; 行中的错误。错误信息:试图在中获取非对象的属性
  • 我添加了executeGetOrder函数的细节,我相信是在while执行的时候有问题
  • @GuilhermeLucas 尝试使用executeGetOrder 函数,并尝试将请求发送到有效页面以及无效页面。对于这两个请求,请执行 var_dump($response); 并告诉我结果是什么。
【解决方案2】:

我做到了,我做了一些改变

$page = 1;

$totalOrders = 0;

do {

$url = 'https://bling.com.br/Api/v2/pedidos/page=' . $page . '/' . $outputType . '/?' . $dataEmissao . '&apikey=' . $apikey;

$retorno = executeGetOrder($url);

$obj = json_decode($retorno);


if(!empty($obj->retorno->pedidos)) {


    $totalOrdersPage = count($obj->return->orders);

    $totalOrders += $totalOrdersPage;

    $page++;


    // Search each orders 
    foreach ($obj->retorno->pedidos as $pedido) {
        // Add value total sales of the orders in $grandTotal
        $grandTotal += $orders->order->totalsale;
    }

} else {
    $totalOrdersPage = 0;
}



} while ($totalOrdersPage > 0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    相关资源
    最近更新 更多