2012-07-10 60 views
2

我有一個腳本循環了一個內部循環遍歷所有按特定順序排列的項的命令數組。在腳本結尾處,我需要連接一個字符串和所有項目數據,每個數據都有一個唯一的標識符。我遇到第一個訂單時出現問題。在foreach循環中更正我的自動增量

我們將假設這個循環將遍歷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

這對於一個訂單很適用,但是一旦我進入下一個訂單,我需要增加者從另一個訂單的剩餘位置繼續。它需要遷移到ITEM4,AMT4,QTY4,ITEM5,AMT5,QTY5等等。現在它可以回到1.任何人有任何想法可以解決這個問題?

回答

5

只需在外環之外移動$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']; 
1

如果我正確理解你的邏輯,你只需要初始化所有環路外的櫃檯:

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

否則,它重新設置爲1,每一份訂單上。