Получение первого элемента из цикла For

Я пишу свой собственный компонент Joomla (MVC), в значительной степени основанный на модуле новостей, потому что я хочу отображать последние 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, но по какой-то причине это привело к тайм-ауту страницы!

Есть идеи?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
2 606
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

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

}else{
  // Other Items...

} 

Не приведет ли использование старого трюка 0 == $ i к ошибке интерпретатора, чтобы этот старый трюк C также стал полезной парадигмой для PHP?

tvanfosson 26.10.2008 21:20

Я наградил вас правильным ответом, хотя у Тванфоссена была хорошая идея. Но вы указали на основную ошибку: двойное равенство, которое страшно. Я узнал об этом и не могу поверить, что упустил это !! Спасибо, что указали на это!

Paul M 26.10.2008 22:54

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

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

tvanfosson, хорошая идея, но мне нужно использовать тот же список элементов позже на той же странице, поэтому я не могу ничего отключить, хотя я попытался скопировать его и отключить, но это испортило mktime !! В любом случае большое спасибо,

Paul M 26.10.2008 22:52

Я просто хотел, чтобы индекс цикла начинался с 1, а не с 0. Сделайте первый элемент до начала цикла.

tvanfosson 26.10.2008 23:32

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

doSomethingWithFirst($list[0]);

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

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

$bFirstTime = true;
foreach($list as $item) {
    if ($bFirstTime) {
        doSomethingWithFirst($item);
        $bFirstTime = false;
    } else {
        doSomethingWithTheRest($item);
    }
}

Другие вопросы по теме