我有一个从mysql查询生成的数组,如下所示。它们的关键是order_id
值。
订单阵列
Array
(
[2646] => Array
(
[order_id] => 2646
)
[2647] => Array
(
[order_id] => 2647
)
[2650] => Array
(
[order_id] => 2650
)
[2658] => Array
(
[order_id] => 2658
)
)
我正在考虑将项目添加到数组的每一行,其中包含来自另一个数组的项目,看起来像。
order_items数组
Array
(
[0] => Array
(
[order_id] => 2646
[prod_code] => 2811
[order_qty] => 1
)
[1] => Array
(
[order_id] => 2646
[prod_code] => 2812A
[order_qty] => 3
)
[2] => Array
(
[order_id] => 2647
[prod_code] => 2812A
[order_qty] => 2
)
[3] => Array
(
[order_id] => 2647
[prod_code] => 2810
[order_qty] => 2
)
[4] => Array
(
[order_id] => 2650
[prod_code] => 2906
[order_qty] => 1
)
[5] => Array
(
[order_id] => 2650
[prod_code] => 2908
[order_qty] => 6
)
[6] => Array
(
[order_id] => 2650
[prod_code] => 2909
[order_qty] => 3
)
[7] => Array
(
[order_id] => 2650
[prod_code] => 2913
[order_qty] => 1
)
[8] => Array
(
[order_id] => 2658
[prod_code] => 2880
[order_qty] => 3
)
[9] => Array
(
[order_id] => 2658
[prod_code] => 2881
[order_qty] => 3
)
[10] => Array
(
[order_id] => 2658
[prod_code] => 2882
[order_qty] => 1
)
)
我在计算如何在order_items
数组上循环并将prod_code
和order_qty
值插入order
数组中order_id
值匹配时遇到的问题。这是我迄今为止所拥有的。
// create orders array - key by order_id
while ($order = mysqli_fetch_assoc($order_rows)) {
$orders[$order['order_id']] = $order;
}
// create the order_items array
while ($item = mysqli_fetch_assoc($item_rows)) {
$order_items[] = $item;
}
// update orders array with ordered items
$item_index = 1;
foreach ($order_items as $key => $value) {
// get the order id
$item_order_id = $value['order_id'];
// update orders array with ordered items grouped by order_id
if ($item_order_id == $orders[$item_order_id]['order_id']) {
$orders[$item_order_id]['prod_code_'.$item_index] = $value['prod_code'];
$orders[$item_order_id]['order_qty_'.$item_index] = $value['order_qty'];
// same order id so increment the counter
$item_index++;
} else {
// new order id start at 1
$item_index = 1;
}
}
我的问题是,当我们查看新的item_order_id
时,计数器不会重置回1。
我试图为我的数组实现的输出是这样的。
所需订单阵列输出
Array
(
[2646] => Array
(
[order_id] => 2646
[prod_code_1] => 2811
[order_qty_1] => 1
[prod_code_2] => 2812A
[order_qty_2] => 3
)
[2647] => Array
(
[order_id] => 2647
[prod_code_1] => 2812A
[order_qty_1] => 2
[prod_code_2] => 2810
[order_qty_2] => 2
)
[2650] => Array
(
[order_id] => 2650
[prod_code_1] => 2906
[order_qty_1] => 1
[prod_code_2] => 2908
[order_qty_2] => 6
[prod_code_3] => 2909
[order_qty_3] => 3
[prod_code_4] => 2913
[order_qty_4] => 1
)
[2658] => Array
(
[order_id] => 2658
[prod_code_1] => 2880
[order_qty_1] => 3
[prod_code_2] => 2881
[order_qty_2] => 3
[prod_code_3] => 2882
[order_qty_3] => 1
)
)
非常感谢任何反馈或协助。
您可以进行两次传递:
- 按订单id聚合订单项
- 构造最终输出
第一次通过
// create the order_items array
while ($item = mysqli_fetch_assoc($item_rows)) {
$order_items[$item['order_id']][] = $item;
}
第二遍
foreach($order_items as $order_id => $order_items) {
$record = ['order_id' => $order_id];
// add order items
foreach($order_items as $index => $order_item) {
foreach ($order_item as $attribute_name => $attribute_value) {
$key = sprintf('%s_%d', $attribute_name, $index + 1);
$record[$key] = $attribute_value;
}
}
// generate csv row with record here
}