关于foreach的每5次迭代的HTML

时间:2014-03-25 17:57:46

标签: php html foreach iteration

我在wordpress上使用extra_user_details.php在私人资料页面中显示用户详细信息。由于我使用了很多额外的字段,我虽然打破了查询并为每个X值生成相同的输出以显示为标签:

function eud_extract_ExtraFields() {
if ( get_option( 'eud_fields' ) ) {

    $all_fields = unserialize( get_option( 'eud_fields' ) );

    if ( count( $all_fields ) > 0 ) {

        $output = '';

foreach ( $all_fields as $key => $value ) {
          if ( isset($value[3]) && ! empty($value[3]) ) {
            if ( ($value[3] == 'disable') || ! current_user_can($value[3]) ) {
                continue;
            }
          }
          $output .= '<tr>
                  <th><label for="eud' . esc_attr( $value[1] ) . '">' . esc_attr( $value[0] ) . '</label></th>
                  <td><input name="eud' . esc_attr( $value[1] ) . '" id="eud' . esc_attr( $value[1] ) . '" type="text" value="' . esc_attr( get_user_meta( get_user_id(), $value[1], true ) ) . '" class="regular-text code" />&nbsp;<span class="description">' . ( ( isset( $value[2] ) && $value[2] !== '' ) ? esc_attr( stripslashes( $value[2] ) ) : '' ) . '</span></td>
                </tr>';
        }

    }

    if ($output != '') {
        echo '<div><table class="form-table">';
        echo $output;
        echo '</table></div>';

}
}    }

谢谢!

我不确定这是不是我要找的东西。我就在附近......

function eud_extract_ExtraFields() {
if ( get_option( 'eud_fields' ) ) {

    $all_fields = unserialize( get_option( 'eud_fields' ) );

    if ( count( $all_fields ) > 0 ) {
        $output = '';


$i=0;
foreach ($all_fields as $key => $value ) {  

           if ( isset($value[3]) && ! empty($value[3]) ) {
            if ( ($value[3] == 'disable') || ! current_user_can($value[3]) ) {
                continue;
            }
          }


          $output .= '<tr>
                  <th><label for="eud' . esc_attr( $value[1] ) . '">' . esc_attr( $value[0] ) . '</label></th>
                  <td><input name="eud' . esc_attr( $value[1] ) . '" id="eud' . esc_attr( $value[1] ) . '" type="text" value="' . esc_attr( get_user_meta( get_user_id(), $value[1], true ) ) . '" class="regular-text code" />&nbsp;<span class="description">' . ( ( isset( $value[2] ) && $value[2] !== '' ) ? esc_attr( stripslashes( $value[2] ) ) : '' ) . '</span></td>
                </tr>';                 
     ++$i;                      

    if(!($i % 2)) {
        echo '<div><table class="form-table">';
        echo $output; 
        echo '</table></div>';

    }   
    }  

 }
}                   
}

但我需要拆分回声,我的意思是,结果是:

第一个标签回显1,2

第二个标签回显1,2,3,4

第三个标签回显1,2,3,4,5,6

我需要$ output只是:

第一个标签回显1,2

第二个标签回显3,4

第三个标签回显5,6

第四个标签回显7(如果存在)

2 个答案:

答案 0 :(得分:3)

你可以使用模数:

$i=0;
foreach ( $all_fields as $key => $value ) {

    if( $i++%5 === 0 ){ echo 'I was number 5';}
}

或者如果您更喜欢二进制比较(应该更快):

if( $i++&101 === 0 ){ echo 'I was number 5';}

我会给你一个例子,你可以把它拼凑起来代码:

假设您有N个span,并且您希望它们按div每5个分组:

// You start with:
echo '<div>';
for($i=1; $i<=23; $i++){
    echo '<span> '.$i.' </span>'; // just an example, could be anything here
}
echo '</div>';

这会将23 span放入一个大div。现在我们添加一些内容将它们分组为5:

// You start with:
echo '<div>';
for($i=1; $i<=23; $i++){
    echo '<span> '.$i.' </span>'; // just an example, could be anything here
    if( $i %5===0 ){
        echo '</div><div>'; // every 5th, close the div, and open a fresh one.
    }
}
echo '</div>';

这将导致5(= coincedence,与%5无关)div,4与5个跨度,以及其余3个。你可以用任何元素做这个技巧。

提示:在模数参数语句中,您应该添加最大值$i %5===0 && $i!==23,以防止</div></div><div> $i如果{{1}}是一个可以解除5的数字

答案 1 :(得分:0)

解决方案来自朋友,谢谢!

function eud_extract_ExtraFields() {
if (get_option('eud_fields')) {

    $all_fields = unserialize(get_option('eud_fields'));

    if (count($all_fields) > 0) {
        $output = '';


        $i = 1;
        $htmlTotal = '';
        foreach ($all_fields as $key => $value) {

            if (isset($value[3]) && !empty($value[3])) {
                if (($value[3] == 'disable') || !current_user_can($value[3])) {
                    continue;
                }
            }


            $output .= '<tr>
              <th><label for="eud' . esc_attr($value[1]) . '">' . esc_attr($value[0]) . '</label></th>
              <td><input name="eud' . esc_attr($value[1]) . '" id="eud' . esc_attr($value[1]) . '" type="text" value="' . esc_attr(get_user_meta(get_user_id(), $value[1], true)) . '" class="regular-text code" />&nbsp;<span class="description">' . ( ( isset($value[2]) && $value[2] !== '' ) ? esc_attr(stripslashes($value[2])) : '' ) . '</span></td>
            </tr>';
            $i++;
         /* number of fields to show per tab */
            if ($i % 2) {
                $htmlTotal .= '<div><table class="form-table">' . $output . '</table></div>';
                $output = '';
            }
        }

        echo $htmlTotal;
        }
     }
 }