检查 foreach 循环 php 期间数组值的变化

问题描述 投票:0回答:1

我正在从 MySQL 导出到 Excel 电子表格,导出工作正常,但我正在尝试更改数组的输出工作方式。

数组示例

Array
(
[0] => Array
    (
        [Product] => ABYT8
        [Invoice Date] => 24/04/2018
        [Carriage] => 31.00
        [Carriage Tax Code] => T0
        [Order Number] => 223
    )

[1] => Array
    (
        [Product] => CASTSRF
        [Invoice Date] => 24/04/2018
        [Carriage] => 0.00
        [Carriage Tax Code] => T1
        [Order Number] => 224
    )

[2] => Array
    (
        [Product] => 12K816
        [Invoice Date] => 24/04/2018
        [Carriage] => 0.00
        [Carriage Tax Code] => T1
        [Order Number] => 224
    )
)

阵列 0 出售 223,阵列 1 和 2 出售 224。

循环这个数组并输出到Excel的foreach如下:

foreach ($export_array as $row) {
    if (!$flag) {
      // display field/column names as first row
        echo implode("\t", array_keys($row)) . "\n";
        $flag = true;
    }       
    array_walk($row, __NAMESPACE__ . '\cleanData');
    echo implode("\t", array_values($row)) . "\n";
}

我只想在每个销售订单编号的第一次迭代中输出运费和运费税代码值,但我不知道如何执行此操作。我尝试重新编写整个内容,将数据分组为按订单号分组的多维数组,这有效,但后来我无法使导出正常工作。

php arrays loops text-comparison
1个回答
5
投票

在迭代数组时跟踪更改组的一般模式:

// keep track of the previous value of the group column as you iterate
$previousOrderNumber = null;

foreach ($export_array as $index => $row) {
    if ($row['Order Number'] != $previousOrderNumber) {
        // it's a new order number, so print the Carriage stuff
    } else {
        // it's the same order number, so don't
    }

    // current becomes previous
    $previousOrderNumber = $row['Order Number'];
}

这确实取决于按组列(在本例中为订单号)排序的数组,因此请确保在查询中完成此操作,或者如果数组不是来自数据库,则对数组进行 usort。

© www.soinside.com 2019 - 2024. All rights reserved.