Gorzej gdy klucze nie są numeryczne lub nie są numerowane od 0, bo wtedy przyrównywanie do 0 staje się niemożliwe. To o czym wspomniałem można zrobić tak,
<?php
foreach($categories as $category)
{
$show_flag = TRUE;
foreach($articles[$category->id] as $index=>$article)
{
if($show_flag)
{
$class = 'show';
$show_flag = FALSE
}
else
{
$class = '';
}
if($article->lead_photo->loaded())
{
$photo = Html::image(
$article->lead_photo->thumb(620, 280),
array('id' => 'article-'.$article->id, 'rel' => $article->title) );
URL::friendly('article/view/%1/%2', $article->id, $article->title),
$photo,
array('title' => $article->title, 'class'=>$class) );
}
}
}
?>
ale sensowniejsze jest inne podejście. Coś na zasadzie pętli do-while, czyli puszczenie pierwszego rekordu i zmiana dopiero po wykonaniu wszystkiego

<?php
foreach($categories AS $category)
{
$class = 'show';
foreach($articles[$category->id] AS $article)
{
if($article->lead_photo->loaded())
{
$photo = Html::image(
$article->lead_photo->thumb(620, 280),
array('id' => 'article-'.$article->id, 'rel' => $article->title) );
URL::friendly('article/view/%1/%2', $article->id, $article->title),
$photo,
array('title' => $article->title, 'class'=>$class) );
}
$class = '';
}
}
?>
Zwróć uwagę na brak ifów i dodatkowych flag. Zamiast niego będzie w każdym kroku pętli przypisywanie do $class wartości pustej po przejściu pierwszego kroku. Trochę kod się skrócił po tym innym podejściu. Pierwszy krok będzie widział jako $class = 'show', czyli to o co nam chodzi i będzie się to resetowało wraz z każdym kolejnym krokiem pierwszej, zewnętrznej, pętli. Wystarczy jednak, że wewnętrzna dojdzie do końca pierwszego kroku, a wraz z nim (i każdym kolejnym

) $class będzie ustawiany na wartość pustą

Dlaczego tak? Ponieważ jeśli dam jako ostatnią operację zmianę $lass, to pierwsze generowanie wewnętrznej pętli będzie jeszcze widziało 'show', ale kolejne już '' zobaczą.