0

foreach ループがあり、単一のアイテムの位置を特定する必要があります。項目は常に 9 です。このコードを使用します。誰かがよりエレガントなソリューションを持っていますか?

<?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; ?>
4

2 に答える 2

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
于 2012-10-27T17:34:50.410 に答える
1

元の位置が必要な場合は、.forではなくループを使用する必要がありますforeach。モジュロ演算子を使用して、長さの論理ステートメントを取り除くこともできます。

<?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 } ?>
于 2012-10-19T17:11:28.363 に答える