如何遍历PHP多维数组实现发票打印并插入数据库查询结果
操作方法
1. 数据库数据插入多维数组
你可以直接以发票ID为键,把查询到的该发票下的商品列表赋值给对应键值即可,示例代码如下:
// 初始化存储发票的多维数组 $INV_PRINT = []; // 假设此处为用户提交的需要打印的发票ID列表 $selected_invoices = ['INV101', 'INV201']; // 可根据需求从数据库查询对应发票的日期,此处示例统一用当前日期 $invoice_date = date('d/m/Y'); // 数据库连接示例($conn为你已创建的数据库连接实例) foreach ($selected_invoices as $inv_id) { // 查询当前发票ID对应的所有商品数据 $sql = "SELECT Prod_Code, Qty FROM 你的商品关联表 WHERE 发票ID字段 = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param('s', $inv_id); $stmt->execute(); // 获取查询到的商品二维数组 $products = $stmt->get_result()->fetch_all(MYSQLI_ASSOC); // 直接赋值到发票数组对应键位 $INV_PRINT[$inv_id] = $products; }
如果你需要为每个发票单独存储日期等信息,可以调整数组结构为:
$INV_PRINT[$inv_id] = [ 'date' => '21/02/2020', // 从数据库查询的对应发票日期 'products' => $products ];
2. 遍历数组输出目标发票格式
纯文本输出示例
foreach ($INV_PRINT as $invoice_no => $product_list) { echo "===================\n"; echo "Invoice No : {$invoice_no}\n"; echo "Date : {$invoice_date}\n\n"; echo "Product Qty\n"; foreach ($product_list as $item) { // str_pad用于补全空格保证列对齐 echo str_pad($item['Prod_Code'], 15) . $item['Qty'] . "\n"; } echo "===================\n"; }
如果是调整了带日期的数组结构,遍历写法调整为:
foreach ($INV_PRINT as $invoice_no => $inv_info) { echo "===================\n"; echo "Invoice No : {$invoice_no}\n"; echo "Date : {$inv_info['date']}\n\n"; echo "Product Qty\n"; foreach ($inv_info['products'] as $item) { echo str_pad($item['Prod_Code'], 15) . $item['Qty'] . "\n"; } echo "===================\n"; }
网页打印适用的HTML输出示例
用表格排版更适合浏览器打印,对齐更精准:
foreach ($INV_PRINT as $invoice_no => $product_list) { echo '<div style="margin:20px 0;border:1px solid #000;padding:15px;page-break-after:always;">'; echo "<p>Invoice No : {$invoice_no}</p>"; echo "<p>Date : {$invoice_date}</p>"; echo '<table width="100%" style="border-collapse:collapse;margin-top:15px;">'; echo '<tr><th width="80%">Product</th><th width="20%">Qty</th></tr>'; foreach ($product_list as $item) { echo "<tr><td>{$item['Prod_Code']}</td><td>{$item['Qty']}</td></tr>"; } echo '</table></div>'; }
内容的提问来源于stack exchange,提问作者Hai Yaa
相关产品推荐
相关产品推荐

