在foreach php中创建多维数组

问题描述 投票:1回答:1

我有一个foreach,它通过API检查多个请求,并仅选择那些具有前缀为sku ==“MCA”的项目的请求。但是,正如我在下面所做的那样,当我必须放置所有请求时,我只能在数组中输入一个订单。

foreach($listaPedidos as $pedido) :
    $i = 0;
    $somatorio = array();

    $resulta = $client->salesOrderInfo($session, $pedido->increment_id);
    foreach($resulta->items as $item) :
        $sku = $item->sku;
        if (substr($sku, 0,3) == "MCA") :
            $email = $pedido->customer_email;
            $codCli = idClienteMca($conn, $session, $client, $email);
            $dataCadastro = date("Y-m-d H:i:s");
            $qtdItens = ++$i;
            $somatorio[] = (float)$item->row_total;
            $totalPedido = array_sum($somatorio);
            $observacao = "";
            $boleto = "0";
            $transportadora = "";

            $todosPedidos = array(
                "codcli"        => $codCli,
                "datacadastro"  => $dataCadastro,
                "qtditens"      => $qtdItens,
                "totalpedido"   => $totalPedido,
                "observacao"    => $observacao,
                "boleto"        => $boleto
            );

        endif;
    endforeach;

endforeach;

我期望的结果是:

array(2) {
  array(6) {
    ["codcli"]=>
    string(3) "576"
    ["datacadastro"]=>
    string(19) "2017-12-28 17:22:24"
    ["qtditens"]=>
    int(3)
    ["totalpedido"]=>
    float(74.19)
    ["observacao"]=>
    string(0) ""
    ["boleto"]=>
    string(1) "0"
  }
  array(6) {
    ["codcli"]=>
    string(3) "890"
    ["datacadastro"]=>
    string(19) "2017-12-28 17:55:24"
    ["qtditens"]=>
    int(4)
    ["totalpedido"]=>
    float(154.89)
    ["observacao"]=>
    string(0) ""
    ["boleto"]=>
    string(1) "0"
  }
}

我如何带来所有请求,而不仅仅是最后一次迭代?

TKS!

php arrays multidimensional-array foreach
1个回答
2
投票

问题你一次又一次地在$todosPedidos中覆盖foreach()变量,这就是为什么你只得到最后的结果。

解:-

  1. 在第一个$todosPedidos = [];之前定义foreach()
  2. $todosPedidos改为$todosPedidos[]

所以代码必须是: -

$todosPedidos = [];
foreach($listaPedidos as $pedido) :
    $i = 0;
    $somatorio = array();

    $resulta = $client->salesOrderInfo($session, $pedido->increment_id);
    foreach($resulta->items as $item) :
        $sku = $item->sku;
        if (substr($sku, 0,3) == "MCA") :
            $email = $pedido->customer_email;
            $codCli = idClienteMca($conn, $session, $client, $email);
            $dataCadastro = date("Y-m-d H:i:s");
            $qtdItens = ++$i;
            $somatorio[] = (float)$item->row_total;
            $totalPedido = array_sum($somatorio);
            $observacao = "";
            $boleto = "0";
            $transportadora = "";

            $todosPedidos[] = array(
                "codcli"        => $codCli,
                "datacadastro"  => $dataCadastro,
                "qtditens"      => $qtdItens,
                "totalpedido"   => $totalPedido,
                "observacao"    => $observacao,
                "boleto"        => $boleto
            );

        endif;
    endforeach;

endforeach;
print_r($todosPedidos); // to check that all data coming or not?
© www.soinside.com 2019 - 2024. All rights reserved.