1

以下のコードでは、オブジェクト「$activeclass」をDIVクラスとして適用したいと思います。含めたエンドポインタは、これを配列の最後の反復にのみ適用すると思いましたが、代わりに、クラスをすべての反復に適用しています。

<div id="right_bottom">
                <?
                $content = is_array($pagedata->content) ? $pagedata->content : array($pagedata->content);
                foreach($content as $item){
                $activeclass = end($content) ? 'active' : ' ';
                    ?>
                    <div id="right_side">
                           <div id="<?=$item->id?>" class="side_items <?=$activeclass?>">
                             <a class="content" href="<?=$item->id?>"><img src="<?=PROTOCOL?>//<?=DOMAIN?>/img/content/<?=$item->image?>"><br />
                             <strong><?=$item->title?></strong></a><br />
                             <h2><?=date('F j, Y',  strtotime($item->published))?></h2><br />
                         </div>
                    </div>
                    <?
                }
                ?>
</div>

私が間違えているアイデアはありますか?「foreach」ステートメントの最後の反復にのみクラス$activeclassを適用するにはどうすればよいですか?

4

3 に答える 3

3

最も簡単な方法は、カウントを維持することです。

$i = 0; $size = count( $content);
foreach( $content as $item) {
    $i++;
    $activeclass = ( $i < $size) ? '' : 'active';
}

または、最後の要素を現在の要素と比較することもできます(配列が0から連続して数値でインデックス付けされている場合[この方法で行われた仮定を指摘してくれたwebbiedaveに感謝します]):

$last = count( $content) - 1;
foreach( $content as $item) {
    $activeclass = ( $content[$last] === $item) ? 'active' : '';
}

配列に重複するアイテムがある場合、このアプローチは機能しないことに注意してください。

最後に、次の方法でインデックスを比較できます。

// Numerical or associative
$keys = array_keys($content); 
$key = array_pop($keys); // Assigned to variables thanks to webbiedave

// Consecutive numerically indexed
$key = count( $content) - 1; 

foreach( $content as $current_key => $item) {
    $activeclass = ( $current_key === $key) ? 'active' : '';
}
于 2012-06-06T22:46:50.200 に答える
1
$activeclass = end($content) ? 'active' : ' ';

このend()関数は配列の最後の要素を返すため、基本的に配列に最後の要素があるかどうかを確認しています(空でない限り、常にそうなります)。

これはあなたが間違っていることの説明です-ニックはカウンターを使ってそれを修正する方法についての答えを持っています。

于 2012-06-06T22:48:40.250 に答える
0

次のリンクからこのアプローチを試してくださいhttp://blog.actsmedia.com/2009/09/php-foreach-last-item-last-loop/

$last_item = end($array);
$last_item = each($array);
reset($array);
foreach($array as $key => $value)
{
    // code executed during standard iteration
    if($value == $last_item['value'] && $key == $last_item['key'])
    {
    // code executed on the 
            // last iteration of the foreach loop
    }
 }
于 2012-06-06T22:51:45.133 に答える