这对某些人来说可能很容易,但我没有正确理解这一点。我正在使用fpdf构建发票PDF并希望显示一定数量的行,即使某些行为空。以下是我到目前为止相关部分的内容:
node_modules
这是有效的(有点)。它在循环下创建了12个新行。我想要总共12个,包括循环响应。我尝试了一些不同的版本,但无法获得生成正确行数的代码。
答案 0 :(得分:1)
这不能按照您期望的方式工作的原因是您在for循环的定义中将$counter
重置为零。它应该稍微改变一下。不是递增$counter
,而是递减$rows
。然后,当你进入for循环时,它将只计算多少行。
$rows = 12;
$repeatable_fields = get_post_meta($post->ID, 'repeatable_fields', true);
if ( $repeatable_fields ) {
foreach ( $repeatable_fields as $field ) {
$pdf->Cell(96, 15, esc_attr( $field['order_sku'] ), 'L,R,B', 0, 'L');
$pdf->Cell(258, 15, esc_attr( $field['order_item'] ), 'R,B', 0, 'L');
$pdf->Cell(30, 15, esc_attr( $field['order_qty'] ), 'R,B', 0, 'C');
$pdf->Cell(96, 15, esc_attr( $field['order_price'] ), 'R,B', 0, 'R');
$pdf->Cell(96, 15, esc_attr( $field['order_subtotal'] ), 'R,B', 1, 'R');
$rows--; // <-------- change this
}
for ($counter = 0 ; $counter < $rows; $counter++){
$pdf->Cell(96, 15, '', 'L,R,B', 0, 'L');
$pdf->Cell(258, 15, '', 'R,B', 0, 'L');
$pdf->Cell(30, 15, '', 'R,B', 0, 'C');
$pdf->Cell(96, 15, '', 'R,B', 0, 'R');
$pdf->Cell(96, 15, '', 'R,B', 1, 'R');
}
}
答案 1 :(得分:0)
如果目标是有12行,即使你的数据点少于12,我认为这可能会这样做:
$repeatable_fields = get_post_meta($post->ID, 'repeatable_fields', true);
$rows = 12;
//Loop 12 times
for ($i = 0; $i < $rows; $i++) {
if (!empty($repeatable_fields[$i])) {
//Since we have an entry for this row number, we'll use it
$pdf->Cell(96, 15, esc_attr($repeatable_fields[$i]['order_sku']), 'L,R,B', 0, 'L');
$pdf->Cell(258, 15, esc_attr($repeatable_fields[$i]['order_item']), 'R,B', 0, 'L');
$pdf->Cell(30, 15, esc_attr($repeatable_fields[$i]['order_qty']), 'R,B', 0, 'C');
$pdf->Cell(96, 15, esc_attr($repeatable_fields[$i]['order_price']), 'R,B', 0, 'R');
$pdf->Cell(96, 15, esc_attr($repeatable_fields[$i]['order_subtotal']), 'R,B', 1, 'R');
} else {
//No entry for this row number, print a blank row
$pdf->Cell(96, 15, '', 'L,R,B', 0, 'L');
$pdf->Cell(258, 15, '', 'R,B', 0, 'L');
$pdf->Cell(30, 15, '', 'R,B', 0, 'C');
$pdf->Cell(96, 15, '', 'R,B', 0, 'R');
$pdf->Cell(96, 15, '', 'R,B', 1, 'R');
}
}
这是未经测试的,但假设$repeatable_fields
从数字开始编号,从0开始没有中断,应做我认为你正在寻找的内容。
修改1
如果我假设$repeatable_fields
从零开始以数字方式编入索引是错误的,您可以使用array_values
将其转换为该格式。