[英]Loop through multidimensional array, split and write results to file
我正在尝试根据存储在 MySQL 数据库中的数据生成单独的文档。
表结构:
+----+-------+-----+------+-------+
| id | order | qty | item | total |
+----+-------+-----+------+-------+
| 1 | 1 | 1 | AAAA | 10 |
| 2 | 2 | 1 | AAAA | 20 |
| 3 | 2 | 1 | BBBB | |
| 4 | 2 | 1 | EEEE | |
+----+-------+-----+------+-------+
注意:列总计的值仅在“父”行上
所需的 output 看起来像这样..
对于单行结果,XML 文件包含:
<Order>1</Order>
<Total>10</Total>
<Detail>
<Qty>1</Qty>
<Item>AAAA</Item>
</Detail>
对于多行结果,一个(单独的)文件包含:
<Order>2</Order>
<Total>20</Total>
<Detail>
<Qty>1</Qty>
<Item>AAAA</Item>
</Detail>
<Detail>
<Qty>1</Qty>
<Item>BBBB</Item>
</Detail>
<Detail>
<Qty>1</Qty>
<Item>EEEE</Item>
</Detail>
我做的第一件事是获取多维数组中的数据:
$ordersArray = array();
$query = "SELECT * FROM `table`";
$getOrders = mysqli_query($db,$query);
$rows = mysqli_fetch_all($getOrders, MYSQLI_ASSOC);
foreach ($rows as $value) {
$ordersArray[$value['order']][] = $value;
}
或相当于:
$ordersArray = array(
1 => array(array('id' => '1', 'order' => '1', 'qty' => '1', 'item' => 'AAAA', 'total' => '10')),
2 => array(array('id' => '2', 'order' => '2', 'qty' => '1', 'item' => 'BBBB', 'total' => '20'), array('id' => '3', 'order' => '2', 'qty' => '1', 'item' => 'CCCCC', 'total' => ''), array('id' => '4', 'order' => '2', 'qty' => '1', 'item' => 'EEEE', 'total' => '')),
);
我设法 output 所需的文件,只要它们只包含一行,使用:
foreach($ordersArray as $key => $value) {
foreach($value as $subkey => $subvalue) {
foreach($subvalue as $k => $v) {
$fileName = $subvalue['order'].".txt";
$output = '';
$output .= "<Order>".$subvalue['order']."</Order>\n";
$output .= "<Total>".$subvalue['total']."</Total>\n";
$output .= "<Details>\n";
$output .= "<Item>".$subvalue['item']."</Item>\n";
$output .= "<Quantity>".$subvalue['qty']."</Quantity>\n";
$output .= "</Details>\n";
}
file_put_contents($fileName, $output);
}
}
Output:
<Order>1</Order>
<Total>10</Total>
<Details>
<ProductSKU>AAAAA<ProductSKU>
<Quantity>1<Quantity>
</Details>
但是当一个订单有多行时,它只输出一个条目。 我应该怎么做才能确保链接到特定订单的所有项目都被分组并写入同一个文件?
您有一个 for 循环来处理很多代码,并且您需要一个标记来仅获取第一个订单和总计。 您添加的标签 Order1 以获得有效的 xml 代码。
<?php
$ordersArray = array(
1 => array(array('id' => '1', 'order' => '1', 'qty' => '1', 'item' => 'AAAA', 'total' => '10')),
2 => array(array('id' => '2', 'order' => '2', 'qty' => '1', 'item' => 'BBBB', 'total' => '20'), array('id' => '3', 'order' => '2', 'qty' => '1', 'item' => 'CCCCC', 'total' => ''), array('id' => '4', 'order' => '2', 'qty' => '1', 'item' => 'EEEE', 'total' => '')),
);
$output = '';
foreach($ordersArray as $key => $value) {
$output .= "<Order1>";
$n = 0;
$output = '';
foreach($value as $subkey => $subvalue) {
$fileName = $subvalue['order'].".txt";
IF($n == 0 )
{
$n = 1;
$output .= "<Order>".$subvalue['order']."</Order>\n";
$output .= "<Total>".$subvalue['total']."</Total>\n";
}
$output .= "<Details>\n";
$output .= "<Item>".$subvalue['item']."</Item>\n";
$output .= "<Quantity>".$subvalue['qty']."</Quantity>\n";
$output .= "</Details>\n";
}
$output .= "<Order1>";
file_put_contents($fileName, $output);
}
new dBug($output);
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.