【问题标题】:Correcting my auto increment in a foreach loop在 foreach 循环中更正我的自动增量
【发布时间】:2012-07-10 20:20:40
【问题描述】:

我有一个脚本循环遍历订单数组,内部循环遍历该特定订单中的所有项目。在脚本结束时,我需要将一个字符串与所有项目数据连接起来,每个项目数据都有一个唯一标识符。当我通过第一个订单时,我的问题就出现了。

我们假设这个循环将遍历 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。有人知道我该如何解决这个问题吗?

【问题讨论】:

    标签: php magento commission-junction


    【解决方案1】:

    只需将 $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'];
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-27
        • 2020-05-26
        • 1970-01-01
        • 2015-07-04
        • 2020-02-10
        相关资源
        最近更新 更多