2

注文の配列をループするスクリプトがあり、その特定の注文にあったすべてのアイテムを内部ループが通過します。スクリプトの最後で、文字列をすべての項目データと連結し、それぞれに一意の識別子を付ける必要があります。私の問題は、最初の注文を過ぎたときに発生します。

このループが 3 つの注文を反復すると仮定します。これが私の例です:

foreach ($_orders as $order)
{
$oid = $order['id'];
$i = 1;
foreach ($order['items'] as $item)
         {
            $cjItemStr .= '&ITEM'. $i . '=' . $item['sku'] . '&AMT' . $i . '=' . $item['price'] . '&QTY' . $i . '=' . $item['qty'];
            $i++;
         }
}

これにより、1 注文に必要なものが正しく出力されます。文字列は次のようになります。

&ITEM1=TT-5555&AMT1=5.00&QTY1=2&ITEM2=TT-3333&AMT2=10.00&QTY2=1&ITEM3=TT-2222&AMT3=15.00&QTY3=1

これは 1 つの注文ではうまく機能しますが、次の注文に移ると、別の注文が中断したところから続行するにはインクリメンターが必要です。ITEM4、AMT4、QTY4、ITEM5、AMT5、QTY5などに移動する必要があります。現在のところ、1に戻るだけです。これを修正する方法について何か考えがありますか?

4

2 に答える 2

6

$i初期化を外側のループの外に移動するだけです。

// Initialize $i outside the first loop:
$i = 1;
foreach ($_orders as $order)
{
  $oid = $order['id'];
  foreach ($order['items'] as $item)
  {
     $cjItemStr .= '&ITEM'. $i . '=' . $item['sku'] . '&AMT' . $i . '=' . $item['price'] . '&QTY' . $i . '=' . $item['qty'];
     // And increment $i for each order item
     $i++;
  }
}
// Assuming count($_orders) == 3 and each has count($order['items'] == 3)
// $i is now 10 after all loops complete.

$iただし、このスクリプトを実行するたびに の値を保持する必要がある場合は、テキスト ファイルに書き込むか、データベースに貼り付けるなど、どこかに保存する必要があります。現時点では、このスクリプトを実行するときはいつでも、最初に戻ります。$i = 0

最後に、Magento が配列要素をどのように処理するかはわかりませんが、このクエリ文字列を PHP で解析する場合は、各要素が配列になるようにフォーマットできます。次に、受信したら、$_GET['ITEM'][]例としてアクセスします。

 // Surrounding each with [] will allow PHP to process them as arrays in the script that receives this
 $cjItemStr .= '&ITEM['. $i . ']=' . $item['sku'] . '&AMT[' . $i . ']=' . $item['price'] . '&QTY[' . $i . ']=' . $item['qty'];
于 2012-07-10T20:22:49.880 に答える
1

あなたのロジックを正しく理解していれば、すべてのループの外側でカウンターを初期化するだけです。

$i = 1;
foreach ($_orders as $order) {
    $oid = $order['id'];

それ以外の場合は、注文ごとに 1 に再設定されます。

于 2012-07-10T20:22:59.443 に答える