Получение первого элемента из цикла For
Вопрос
Я пишу свой собственный компонент 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>
Первый элемент должен иметь другое значение и элемент класса, добавленный в:элемент, поэтому мне нужно иметь возможность определить, какой элемент является первым, и сделать что-то во время этого цикла.
Я пытался использовать оператор if $ i = 0 else в default.php , но по какой-то причине это привело к таймауту страницы!
Есть какие-нибудь идеи?
Решение
Ты сказал, что пытался if $i = 0
, тот оператор сравнения в PHP это ==
, с вашим if у вас бесконечный цикл, потому что на каждой итерации вы присваиваете 0 $ i, и оно никогда не достигает $ n , вы должны выполнить внутри вашего цикла:
if ($i == 0){
// First Item here...
}else{
// Other Items...
}
Другие советы
Я думаю, что @CMS - это правильно.
Возможно, вы также захотите подумать об обработке первого элемента вне цикла и позволить циклу обрабатывать остальные элементы.Таким образом, вам не нужно выполнять проверку при каждом проходе через цикл.
Если вы используете обычный for
цикл, я бы рекомендовал просто действовать с 1-м элементом, а затем выполнять цикл с остальными, как тванфоссон сказал.Это немного быстрее и потенциально легче для чтения...
doSomethingWithFirst($list[0]);
for ($i = 1; $i < count($list); $i++) {
doSomethingWithTheRest($list[$i]);
}
Я склонен использовать foreach
закончился for
чтобы перебирать массивы, в этом случае я бы использовал "firstDone" var, например:
$bFirstTime = true;
foreach($list as $item) {
if ($bFirstTime) {
doSomethingWithFirst($item);
$bFirstTime = false;
} else {
doSomethingWithTheRest($item);
}
}