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

这对一个订单很有用,但是一旦我进入下一个订单,我需要增量器从另一个订单停止的地方继续。它需要移动到 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 回答