修正foreach循环中的自动增量

时间:2012-07-10 20:20:41

标签: php magento commission-junction

我有一个循环遍历订单数组的脚本,内部循环遍历按特定顺序排列的所有项目。在脚本的末尾,我需要将一个字符串与所有项目数据连接起来,每个项目数据都有一个唯一的标识符。当我超越第一个订单时,我的问题就出现了。

我们假设这个循环将迭代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 < / p>

这适用于一个订单但是一旦我转到下一个订单,我需要增量器从另一个订单停止的地方继续。它需要转移到ITEM4,AMT4,QTY4,ITEM5,AMT5,QTY5等。现在它只是回到1.任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分: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 :(得分:1)

如果我理解你的逻辑,你只需要在所有循环之外初始化你的计数器:

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

否则,每个订单都会重新设置为1。