php - 在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 值,但我不知道该怎么做。我尝试重新编写将数据分组到按订单号分组的多维数组的整个内容,该数组有效,但后来我未能使导出工作。
任何指针将不胜感激
解决方案
在迭代数组时跟踪更改组的一般模式:
// 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'];
}
这确实取决于按组列(在这种情况下为订单号)排序的数组,因此请确保在您的查询中完成,或者如果数组不是来自数据库,则对数组进行排序。
推荐阅读
- java - 如何在不损失质量的情况下缩放界面大小?
- node.js - 如何在 nodejs 中实现排除控制
- javascript - 在我的 JQuery 模式代码中,高度、宽度和可调整大小模式的参数被忽略
- javascript - 使用nodejs连接到docker容器内的unix套接字
- java - 如何使用纯 Jackson 而不是 Spring 在 Java 中使用 Spring HAL/HATEOAS API
- angular - 如何将 Ionic Capacitor 与现有的 Angular 7 Web 应用程序正确集成
- java - 在匿名类中定义自定义函数/属性
- symfony - PRE_WRITE 事件中的存储库返回查询数据,而不是保存的数据
- android - 不正确的用户界面 - 安卓
- hibernate - 使用生成策略 IDENTITY 时,对关联的 Bean 验证不起作用