2012-12-20 15 views
6

Ho un array chiamato $ contenuto delle pagine è la seguente:scorrere array di oggetti

Array 
(
[01-about-us] => Page Object 
    (
     [_uri] => about-us 
     [_menuItem] => 01 
     [_visable] => 1 
    ) 

[02-contact] => Page Object 
    (
     [_uri] => contact 
     [_menuItem] => 02 
     [_visable] => 1 
    ) 

[_sitemap] => Page Object 
    (
     [_uri] => sitemap 
     [_menuItem] => 
     [_visable] => 
    ) 

[home] => Page Object 
    (
     [_uri] => home 
     [_menuItem] => 
     [_visable] => 1 
    ) 
) 

c'è un modo semplice per eseguire il ciclo e ottenere oggetti della pagina per Non ci proprietà, vale a dire:

<?php foreach($pages->_visible() AS $p): ?> 
    <li> page </li> 
<?php endforeach ?> 
+0

Vuoi dire che vuoi solo recuperare gli oggetti che sono visibili in questo caso? – Andris

+1

Effettuate semplicemente il loop sull'array normalmente e usate un'istruzione 'if' all'interno del loop per determinare se ciascun oggetto della pagina è visibile e un elemento della lista deve essere reso. –

+0

Due cose: 1: stai ortograficamente 'visibile'. 2: nell'array fai riferimento a 'visable' come a un campo, nel' foreach' come metodo. –

risposta

14

No. si dovrà utilizzare un if:

foreach ($pages as $page) { 
    if ($page->_visible == 1) { 
     echo "<li>page</li>"; 
    } 
} 

(nota anche errore di ortografia visible nella matrice, forse un errore di battitura)

+0

Penso che l'underscore principale ('_...') nell'output indichi proprietà private ... Non ho lavorato molto con PHP ultimamente, quindi potrei sbagliarmi. –

+0

@FelixKling PHP ha una parola chiave 'private' per quello. Non saprei dire se non ho la definizione di classe della classe 'Page' di OP. Lo usa nel suo codice, quindi ho calcolato che questo è il modo per sapere se una pagina è visibile. Probabilmente dovrebbe usare un metodo, comunque. –

+0

perfetto, grazie, era solo un problema di ortografia, pensavo stavo impazzendo. –

3

Hai solo bisogno di scorrere l'array pagine e all'interno del accesso alla rete le proprietà degli oggetti come:?

<?php foreach($pages as $k => $p): ?> 
    <?php if ($p->_visable === 1): ?> 
    <li><?php echo $k; ?></li> 
    <?php endif; ?> 
<?php endforeach; ?> 

prega di notare che visibile è errato ma questo come è nella sua interrogazione

+0

Perché tutti i tag ''? –

+0

Perché questo è il modo in cui l'OP lo sta facendo attualmente, SÌ Capisco tutto su BEST PRACTICES ma stavo cercando di mantenere la loro struttura attuale;) – PhearOfRayne

+2

Quando si utilizza PHP come linguaggio modello, cioè incorporando PHP in HTML, allora questo stile è più leggibile IMO di ogni altra cosa Ogni affermazione sembra in qualche modo un "tag" e quindi è più facile individuare/adattarsi meglio all'HTML e la struttura/flusso è più chiara. –

6

Oppure si può utilizzare la funzione di PHP array_filter:

$pagesVisible = array_filter($pages, function($page) { 
    return (bool) $page->_visible; 
}); 

foreach ($pagesVisible as $key => $page) { 
    print '<li>' . $key . '</li>'; 
} 

O abbreviazione:

$filter = function($page) { 
    return (bool) $page->_visible; 
}; 
foreach (array_filter($pages, $filter) as $key => $page) { 
    print '<li>' . $key . '</li>'; 
}