在foreach php中创建多维数组

在foreach php中创建多维数组,php,arrays,multidimensional-array,foreach,Php,Arrays,Multidimensional Array,Foreach,我有一个foreach,它通过API检查多个请求,并只选择那些包含前缀为sku==“MCA”的项目的请求。但是,正如我在下面所做的,我只能在数组中放置一个订单,而我必须放置所有请求 foreach($listaPedidos as $pedido) : $i = 0; $somatorio = array(); $resulta = $client->salesOrderInfo($session, $pedido->increment_id); f

我有一个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

问题您一次又一次地在
foreach()
中过度写入
$todosPedidos
变量,这就是为什么您只得到最后一个结果

解决方案:-

  • 定义
    $todosPedidos=[]在第一个
    foreach()之前

  • $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?
    

    英语pls@tadman打扰一下这里要注意的是,
    if…:
    endif
    相当不标准。虽然有效,但大多数代码库都使用传统的
    if{…}
    结构,这仅仅是因为它不太冗长!但结果却出乎意料。现在的答案是6个数组,我只期望2个。我在数据库中有两个相等的顺序,我需要在数组中主要写入项的总数以及请求的总值。但这样的结果是每个产品都有一个循环。每个订单我需要一个循环。