Получение первого элемента из цикла For - PullRequest
2 голосов
/ 26 октября 2008

Я пишу свой собственный компонент Joomla (MVC), который в значительной степени основан на модуле newsflash, потому что я хочу отображать последние 5 элементов контента в интерфейсе со скользящими вкладками, вся тяжелая работа выполнена, но у меня Трудно получить контент из цикла for.

Вот код, который у меня есть default.php

<ul id="handles" class="tabs">
    <?php for ($i = 0, $n = count($list); $i < $n; $i ++) :
            modSankeSlideHelper::getTabs($list[$i]);
     endfor; ?>                
<li class="end"></li>
</ul>

helper.php

function getTabs(&$item)
{
    global $mainframe;

    $item->created     = $item->created;

    list($year, $month, $day) = split("-", $item->created);
    $tabdate = date('d\/m\/y', mktime(0, 0, 0, $month, $day, $year));

    require(JModuleHelper::getLayoutPath('mod_sankeslide', '_tab'));
}

_tab.php

<li><a href="#tab"><span><?php echo 'Shout ' . $tabdate; ?></span><b></b></a></li>

Первый элемент должен иметь другое значение и элемент класса, добавленный к элементу a :, поэтому я должен иметь возможность определить, какой элемент является первым, и что-то делать во время этого цикла.

Я пытался использовать if $ i = 0 else в файле default.php, но по какой-то причине это привело к тайм-ауту страницы!

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 26 октября 2008

Вы сказали, что пытались if $i = 0, оператор сравнения в PHP равен ==, с вашим, если у вас есть бесконечный цикл, потому что в каждой итерации вы присваиваете 0 для $ i, и это никогда не достигает $ n, вы должны сделать внутри цикла:

if ($i == 0){
  // First Item here...

}else{
  // Other Items...

} 
2 голосов
/ 26 октября 2008

Я думаю, что @CMS верна.

Вы также можете подумать о том, чтобы обработать первый элемент вне цикла и позволить циклу обрабатывать остальные элементы. Таким образом, вам не нужно проверять каждый проход цикла.

1 голос
/ 27 октября 2008

Если вы используете простой цикл for, я бы порекомендовал просто воздействовать на 1-й элемент, а затем перебирать все остальное, как tvanfosson сказал . Это немного быстрее и потенциально легче для чтения ...

doSomethingWithFirst($list[0]);

for ($i = 1; $i < count($list); $i++) {
    doSomethingWithTheRest($list[$i]);
}

Я склонен использовать foreach over for для циклического перемещения по массивам, и в этом случае я бы использовал var "firstDone", например так:

$bFirstTime = true;
foreach($list as $item) {
    if ($bFirstTime) {
        doSomethingWithFirst($item);
        $bFirstTime = false;
    } else {
        doSomethingWithTheRest($item);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...