使用条件语句自动递增 PHP for each 循环


Auto Increment PHP foreach loop with conditional statements

我创建了一个循环~50个字段值的foreach循环。我使用条件语句仅输出我想要的字段。我想以不同的方式设置交替行的样式(我必须使用内联 css,因为这适用于 HTML 电子邮件)。我假设我可以通过使用 $i 变量遍历循环然后获得奇数/偶数来实现这一点。我遇到的问题是这个循环正在遍历 ~50 个字段,并且由于我没有输出某些字段,因此整数不按顺序排列。结果是 1,2,3,7,10,依此类推。我无法通过此结果获得准确的奇数/偶数结果。

这是代码:

$i = 1;
foreach ( $form['fields'] as $field ) {
    $use_text = false;
    $raw_field_value = RGFormsModel::get_lead_field_value( $entry, $field );
    $field_value = GFCommon::get_lead_field_display( $field, $raw_field_value, rgar( $entry, 'currency' ), $use_text, $format, 'email' );
    if ( $field->type == "product" || $field->type == "hidden" || $field->type == "section" || $field->type == "html" ) {
        continue;
    } else if ( GFFormsModel::is_field_hidden( $form, $field, array(), $entry ) ) {
        // ignore fields hidden by conditional logic
        continue;
    }
    if ( $field_value === false ) {
        continue;
    }
    if ( !empty( $field_value ) || strlen( $field_value ) > 0 ) {
        $message .= '<tr style="vertical-align: top; text-align: left; padding: 0;" align="left">';
            $message .= '<td style="word-break: break-word; -webkit-hyphens: none; -moz-hyphens: none; hyphens: none; border-collapse: collapse !important; vertical-align: top; text-align: left; color: #252b23; font-family: Helvetica, Arial, sans-serif; font-weight: normal; line-height: 19px; font-size: 14px; border-left-style: solid; border-left-color: #ccc; border-left-width: 1px; border-top-color: #ccc; border-top-width: 1px; border-top-style: solid; margin: 0; padding: 8px;" align="left" valign="top"><strong>' . $field->label . '</strong> ' . $i . '</td>';
            $message .= '<td style="word-break: break-word; -webkit-hyphens: none; -moz-hyphens: none; hyphens: none; border-collapse: collapse !important; vertical-align: top; text-align: left; color: #252b23; font-family: Helvetica, Arial, sans-serif; font-weight: normal; line-height: 19px; font-size: 14px; border-left-style: solid; border-left-color: #ccc; border-left-width: 1px; border-top-color: #ccc; border-top-width: 1px; border-top-style: solid; margin: 0; padding: 8px;" align="left" valign="top">' . $field_value . '</td>';
        $message .= '</tr>';
    }
    $i++;
}

有没有办法将整数结果更改为基于输出的最终结果?如果仅输出 5 个字段,则整数值应为 1,2,3,4,5。

我希望这是有道理的。

通过使用 continue ,您可以跳过foreach体的其余部分,包括$i变量的增量。

为了避免这种情况,您可以在迭代开始时执行增量,并在 0 处初始化$i

$i = 0;
foreach ( $form['fields'] as $field ) {
    $i++;

如果$forms是一个带有数字索引的纯数组,那么你可以像这样写上面的三行:

foreach ( $form['fields'] as $i => $field ) {