2015-10-01 6 views
5

Facile, ma non riesco a trovare una risposta.Come cambiare la classe del primo risultato dell'eco in PHP?

Desidero elencare le sottocategorie per creare schede nel seguente codice. Questo funziona bene nella mia produzione. Ma la prima scheda ha bisogno di un <li class= "selected" > per mostrare il contenuto al caricamento della pagina.

Come forzare il primo risultato di eco a includere una classe sull'elemento <li>?

.

.

.

[Uscita]

attuale: .......... categoria 1 | Categoria 2 | Categoria 3

Necessario: .......... Categoria 1 * | Categoria 2 | Categoria 3

class * = "selezionato"

<ul class="cd-tabs-navigation"> 

    <?php 
    $argumentos = array(
    'hide_empty' => 1, 
    'child_of' => 44, 
); 
    $categories = get_categories($argumentos); 
    foreach($categories as $category) { 
    echo '<li><a data-content="' . $category->slug . '" href="#' . $category->slug . '">' . $category->name . '</a></li>'; 
    } 
    ?> 

    </ul> 

.

.

[EDIT]

La soluzione da Lal. Grazie a tutti!

foreach($categories as $category) { 
    if(++$i==1) 
    echo '<li class="selected"><a class="selected" data-content="' . $category->slug . '" href="#' . $category->slug . '">' . $category->name . '</a></li>'; 
    else 
    echo '<li><a data-content="' . $category->slug . '" href="#' . $category->slug . '">' . $category->name . '</a></li>'; 
    } 
+0

perché vuoi che la classe venga aggiunta? è per applicare gli stili? – Lal

+0

Ho bisogno che la classe attivi uno script. Sto usando questo sistema di codice. http://codyhouse.co/gem/responsive-tabbed-navigation/ – rdllngr

risposta

3

vorrei suggerire di utilizzare un contatore .. Non so se questo è il modo giusto per farlo ..

Cambia la tua foreach come segue

$i=0; 
foreach($categories as $category) { 
    if($i==0) 
    echo '<li class="selected"><a data-content="' . $category->slug . '" href="#' . $category->slug . '">' . $category->name . '</a></li>'; 
    else 
    echo '<li><a data-content="' . $category->slug . '" href="#' . $category->slug . '">' . $category->name . '</a></li>'; 
    $i++; 
    } 

O

Come suggerito nella risposta here, è possibile utilizzare array_shift() per elaborare il primo elemento nell'array separatley.

Cioè, fare come qui sotto

$first = array_shift($categories); 
echo '<li class="selected"><a data-content="' . $first ->slug . '" href="#' . $first ->slug . '">' . $first ->name . '</a></li>'; 
foreach($categories as $category) { 
    echo '<li><a data-content="' . $category->slug . '" href="#' . $category->slug . '">' . $category->name . '</a></li>'; 
} 

saperne di più array_shift() nel docs

+0

Quasi! Ho solo bisogno del valore (++ $ i == 1) invece di 0 per funzionare! Ho incluso il codice finale in questione. Semplice e pulito. Grazie mille amico! – rdllngr

+0

Grande .. :) Sono contento che abbia aiutato ... – Lal

+2

@Lal Non stai incrementando '$ i' nel tuo primo esempio, quindi' $ i == 0' sarà sempre vero. – Drown

-1

È possibile utilizzare questa sintassi per foreach. Usando questa sintassi hai in $ k l'indice dell'iterazione, mentre in $ v il valore dell'array che stai iterando. Quindi se $ k == 0 sei nella prima iterazione.

+0

Sta facendo proprio questo – RiggsFolly

+0

Questo non risponde alla domanda. – rnevius

+0

Perché non risponde? Se usa questa sintassi può fare un controllo sulla variabile chiave $. Se è 0, è nella prima iterazione, quindi può aggiungere una classe all'html. – gmast

1

soluzione di Lal funzionerà benissimo (a patto che si incrementa $i), ma qui c'è un modo più semplice per farlo senza una variabile in più per il contatore:

foreach($categories as $index => $category){ 
    if(!$index) echo "This is the first element"; 
    else echo "This is not the first element"; 
} 

(non so se questo dovrebbe essere una modifica o una risposta dal momento che è fondamentalmente t Lo stesso metodo, ma con un sintassi leggermente più semplice, pubblicherò per ora una risposta)

Problemi correlati