首页 > 解决方案 > 在foreach循环php期间检查数组值的变化

问题描述

我正在从 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";
  }

我只想在每个销售订单号的第一次迭代中输出 Carriage & Carriage Tax Code 值,但我不知道该怎么做。我尝试重新编写将数据分组到按订单号分组的多维数组的整个内容,该数组有效,但后来我未能使导出工作。

任何指针将不胜感激

标签: phparrays

解决方案


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

// 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'];
}

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


推荐阅读