Obtener el primer elemento de un bucle For
Pregunta
Estoy escribiendo mi propio componente Joomla (MVC), que se basa en gran medida en el módulo de flash de noticias, porque quiero mostrar los últimos 5 elementos de contenido en una interfaz con pestañas deslizantes, todo el trabajo duro está hecho, pero estoy teniendo Es difícil obtener contenido fuera del bucle for.
Aquí está el código que tengo hasta ahora 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>
El primer elemento debe tener un valor diferente y un elemento de clase agregado al elemento a: por lo tanto, debo poder identificar cuál es el primer elemento y hacer algo durante ese ciclo.
Intenté usar la instrucción if $ i = 0 else en el archivo default.php, ¡pero por alguna razón, se produjo un tiempo de espera de página!
¿Alguna idea?
Solución
Dijiste que intentaste si $ i = 0
, el operador de comparación en PHP es ==
, con su si tiene un bucle sin fin, porque en cada iteración asigna 0 a $ i, y nunca llega a $ n, debe hacerlo dentro de su bucle :
if ($i == 0){
// First Item here...
}else{
// Other Items...
}
Otros consejos
Creo que @CMS es correcto.
Es posible que también desee pensar en manejar el primer elemento fuera del bucle y dejar que el bucle maneje el resto de los elementos. De esta manera, no tiene que realizar la comprobación de cada paso a través del bucle.
Si está utilizando un bucle simple para
, recomendaría simplemente actuar sobre el primer elemento y luego recorrer el resto como tvanfosson dijo . Es un poco más rápido y potencialmente más fácil de leer ...
doSomethingWithFirst($list[0]);
for ($i = 1; $i < count($list); $i++) {
doSomethingWithTheRest($list[$i]);
}
Tiendo a usar foreach
sobre para
para hacer un ciclo sobre los arreglos, en cuyo caso, usaría " firstDone " var, así:
$bFirstTime = true;
foreach($list as $item) {
if ($bFirstTime) {
doSomethingWithFirst($item);
$bFirstTime = false;
} else {
doSomethingWithTheRest($item);
}
}