Erst das erste Element aus einem For-Schleife
Frage
Ich bin meine eigene Joomla-Komponente (MVC) zu schreiben, seine schwer auf dem Newsflash-Modul basiert, weil ich die neuesten 5 Inhaltselemente in einer gleitenden Oberfläche mit Registerkarten, die ganze harte Arbeit getan angezeigt werden soll, aber ich habe echte schwieriger, Inhalte aus der for-Schleife.
Hier ist der Code Ich habe bisher 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>
Der erste Punkt muss anderen Wert hat und eine Klasse Element hinzugefügt, um die a. Einzelteil, also ich muß in der Lage sein zu erkennen, welche das erste Element ist und während dieser Schleife etwas tun
Ich habe versucht, wenn $ i = 0 else-Anweisung in der default.php zu verwenden, aber es führte zu einer Seite Timeout aus irgendeinem Grund!
Irgendwelche Ideen?
Lösung
Du hast gesagt, du versucht if $i = 0
, die Vergleichsoperator in PHP ist ==
, mit Ihrem wenn Sie eine Endlosschleife, weil in jeder Iteration Sie 0 bis $ i zuweisen, und es erreicht nie $ n, sollten Sie in Ihrem Schleife tun:
if ($i == 0){
// First Item here...
}else{
// Other Items...
}
Andere Tipps
Ich denke, @CMS korrekt ist.
Sie können auch über den Umgang mit dem ersten Punkt außerhalb der Schleife denken und ließen die Schleife den Rest der Elemente behandeln. Auf diese Weise müssen Sie nicht die Prüfung machen auf jeder durch die Schleife.
Wenn Sie eine Ebene for
Schleife verwenden, würde ich empfehlen, auf dem 1. Artikel einfach handeln und dann durch den Rest Looping als tvanfosson genannten . Es ist etwas schneller und möglicherweise leichter zu lesen ...
doSomethingWithFirst($list[0]);
for ($i = 1; $i < count($list); $i++) {
doSomethingWithTheRest($list[$i]);
}
neige ich foreach
über for
Schleife über Arrays zu verwenden, wobei in diesem Fall würde ich einen "firstDone" var verwenden, etwa so:
$bFirstTime = true;
foreach($list as $item) {
if ($bFirstTime) {
doSomethingWithFirst($item);
$bFirstTime = false;
} else {
doSomethingWithTheRest($item);
}
}