我有一个循环遍历订单数组的脚本,内部循环遍历按特定顺序排列的所有项目。在脚本的末尾,我需要将一个字符串与所有项目数据连接起来,每个项目数据都有一个唯一的标识符。当我超越第一个订单时,我的问题就出现了。
我们假设这个循环将迭代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.任何人都知道如何解决这个问题?
答案 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。