2012-10-19 7 views
0

У меня есть цикл foreach, и мне нужно определить положение отдельных элементов. Элементы всегда 9. Я использую этот код. У кого-то есть более элегантное решение?Определить положение в цикле foreach

<?php 
    foreach($fruit as $key => $apple); 
?> 
    <li class="<?php if(($key == 0) || ($key == 3) || ($key == 6)) echo 'first'; if(($key == 1) || ($key == 4) || ($key == 7)) echo 'middle'; if(($key == 2) || ($key == 5) || ($key == 8)) echo 'last'; ?>" 
      //stuff 
    </li> 
<?php endforeach; ?> 
+1

Modulo из 3 дает вам 0,1,2 Начало, среднее и конечное –

+0

Привет, Тони, не могли бы вы привести пример? Спасибо. – Francesco

ответ

1

По комментировал запросу хотя PHP является языком я сделал немного больше, чем возиться с

<?php foreach($fruit as $key => $apple); ?> 
     <?php $position = $key % 3; ?>  
    <li class="<?php if($position == 0) echo 'first'; 
        if($position == 1) echo 'middle'; 
        if($position == 2) echo 'last'; ?>" 
      //stuff 
    </li> 
<?php endforeach; ?> 

% это остаток от деления нацело

0/3 = 0 remainder 0 
1/3 = 0 remainder 1 
2/3 = 0 remainder 2 
3/3 = 1 remainder 0 
... 
8/3 = 2 remainder 2 
1

Если вам нужно исходное положение, вы должны, скорее всего, используя for петлю, а не foreach. Вы также можете избавиться от логической инструкции длины, используя оператор modulo.

<?php 
    for($i = 0; $i < count($fruit); $i++) { 
     $apple = $fruit[i]; 
     $remainder = $i % 3 
?> 

    <li class="<?php 
     if($remainder == 0) echo 'first'; 
     if($remainder == 1) echo 'middle'; 
     if($remainder == 2) echo 'last'; ?>" 

    // stuff 

    </li> 

<?php } ?> 
+0

$ fruit.length? –

Смежные вопросы