2016-11-01 3 views
0

Я делаю foreach, я бы хотел пропустить первые шесть записей. У меня есть это до сих пор, он просто выводит один и тот же номер, для количества оставшихся записей, должен ли я помещать if($i2==6) continue; где-нибудь еще?PHP Foreach Skip First 6

<?php 
       $features = $property->get_features(); 
       if($lastRec2=count($features)){ 
         echo '<div class="row">'; 
         $i2=0; 
          foreach($features as $feature2) { 
           $i2++; 
           if($i2==6) continue; 
           if(($i2 % 3== 1) && ($i2<$lastRec2)) echo '</div><div class="row">'; 
            echo '<div class="col-md-4 p-b-15"><div class="fa-stack fa-1x checkmark-icon"><i class="fa fa-circle fa-stack-2x icon-background"></i><i class="fa fa-check fa-stack-1x icon-text"></i></div><div class="checkmark-inner">'. $feature .'</div></div>'; 
          } 
         echo '</div>'; 
        } 
        ?> 
+1

Вы имеете в виду 'if ($ i2 <= 6)'? с 'if ($ i2 == 6)' вы пропускаете только одну запись. – Federkun

+0

1 Я не вижу, где '$ feature' определяется в области вашего цикла. 2. Почему бы не использовать цикл for вместо цикла foreach? – bassxzero

ответ

1

Просто переключиться на цикл. Если вам не нужен итератор.

$features = $property->get_features(); 
if($lastRec2 = count($features)){ 
    echo '<div class="row">'; 
    for ($i2 = 6; $i2 < count($features); ++$i2) { 
    if(($i2 % 3 == 1) && ($i2 < $lastRec2)) echo '</div><div class="row">'; 
     echo '<div class="col-md-4 p-b-15"><div class="fa-stack fa-1x checkmark-icon"><i class="fa fa-circle fa-stack-2x icon-background"></i><i class="fa fa-check fa-stack-1x icon-text"></i></div><div class="checkmark-inner">'. $features[$i2] .'</div></div>'; 
    } 
    echo '</div>'; 
    } 
+0

Спасибо, это сработало отлично! – cameronmarklewis

1

Должно быть

if($i2<=6) 
    continue; 

continue; остановит остальную часть Еогеасп от выполнения.
Ваш код будет работать только один раз, потому что $i2 будет установлен в 6 только один раз.

0

первую очередь, если вы хотите, чтобы удалить первые шесть записей, ваш, если это не так, должно быть:

if($i2 <= 6) continue; 

Если ключи от массива sequencial, вы могли бы сделать это:

foreach($features as $key => $feature2) { 
    if($key < 6) continue;//0 to 5 

Если ваш код должен работать в любом случае

1

Вы можете использовать array_chunkarray_slice и сделать то, что вы после:

http://php.net/manual/en/function.array-slice.php

http://php.net/manual/en/function.array-chunk.php

$features = $property->get_features(); 

$skipped = array_slice($features, 6); 

$chunks = array_chunk($skipped, 3); 

foreach ($chunks as $chunk) { 
    echo '<div class="row">'; 

    foreach ($chunk as $feature) { 
     echo '<div class="col-md-4 p-b-15"><div class="fa-stack fa-1x checkmark-icon"><i class="fa fa-circle fa-stack-2x icon-background"></i><i class="fa fa-check fa-stack-1x icon-text"></i></div><div class="checkmark-inner">' . $feature . '</div></div>'; 
    } 

    echo '</div>'; 
} 

В качестве альтернативы, если вы хотите, чтобы сделать ваш код немного больше читаемый с помощью HTML, вы можете:

foreach ($chunks as $chunk) : ?> 

    <div class="row"> 

     <?php foreach ($chunk as $feature) : ?> 

      <div class="col-md-4 p-b-15"> 

       <div class="fa-stack fa-1x checkmark-icon"> 
        <i class="fa fa-circle fa-stack-2x icon-background"></i> 
        <i class="fa fa-check fa-stack-1x icon-text"></i> 
       </div> 

       <div class="checkmark-inner"> 
        <?php echo $feature ?> 
       </div> 

      </div> 

     <?php endforeach; ?> 

    </div> 

<?php endforeach; 

FYI, я принимаю $feature2 в вашем вопросе была опечатка. Если бы это не дало мне знать, какая переменная должна быть тем, и я буду обновлять свой ответ.

Надеюсь, это поможет!