在Foreach中使用For

时间:2016-02-29 02:48:44

标签: php for-loop foreach

这对某些人来说可能很容易,但我没有正确理解这一点。我正在使用fpdf构建发票PDF并希望显示一定数量的行,即使某些行为空。以下是我到目前为止相关部分的内容:

node_modules

这是有效的(有点)。它在循环下创建了12个新行。我想要总共12个,包括循环响应。我尝试了一些不同的版本,但无法获得生成正确行数的代码。

2 个答案:

答案 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将其转换为该格式。