2017-12-28 25 views
1

私は、API経由で複数のリクエストをチェックし、接頭辞がsku == "MCA"の項目を持つリクエストのみを選択するforeachを持っています。しかし、私が下で行ったように、私はすべてのリクエストを配置しなければならないときに配列内に1つのオーダーしか置くことができません。私は期待foreach PHPで多次元配列を作成する

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!

+0

英語plsは –

+1

は恐れ入り@tadman。英語の変更 –

+0

ここで注意すべき点の1つは、 'if ...:'と 'endif'の使用がかなり非標準的なことです。有効ではあるが、ほとんどのコードベースはそれほど冗長ではないので、従来の 'if {...}'構造体を代わりに使用する。 – tadman

答えて

2

問題あなたは何度も何度もforeach()$todosPedidos変数を過剰に書いている、とあなただけの最後の結果を得た理由です。

ソリューション: -

  1. 最初foreach()$todosPedidos = [];を定義します。

    $todosPedidos[]

  2. 変更$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? 
+0

しかし、結果はまだ期待されていませんでした。答えは6つの配列で、私は2つしかないと思った。データベースに2つの等しい注文があり、主にアイテムの合計とリクエストの合計値を配列に書き込む必要がある。しかし、その結果、各製品のループが発生しました。注文ごとにループが必要です。 –