2012-12-20 195 views
6

的陣列我有一個數組名爲$頁內容如下:遍歷對象

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 
    ) 
) 

有通過一個簡單的方法來循環並有性能獲得頁面的對象,即:

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

您的意思是說您只想獲取在這種情況下可見的對象? – Andris

+1

只需循環遍歷數組,並在循環內部使用if語句來確定每個頁面對象是否可見並且應該呈現列表元素。 –

+0

兩件事情:1:你不一致拼寫'可見'。 2:在數組中,您將'visable'稱爲字段,在'foreach'中稱爲方法。 –

回答

14

號你將不得不使用if

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

(還要注意你拼錯visible在陣列中,也許是筆誤)

+0

我認爲輸出中的前導下劃線('_...')表示私有屬性...儘管如此,我並沒有在PHP上工作太多,所以我可能是錯的。 –

+0

@FelixKling PHP有一個'private'關鍵字。我不知道我是否沒有OP的「Page」類的類定義。他在自己的代碼中使用它,所以我認爲這是知道頁面是否可見的方式。不過,它應該使用一種方法。 –

+0

完美的感謝,這只是一個拼寫問題,我以爲我瘋了。 –

3

你只需要遍歷網頁陣列和循環訪問內部類的對象屬性:?

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

請注意,visable的拼寫錯誤,但多數民衆贊成它是如何在你的問題

+0

爲什麼所有''標籤? –

+0

因爲多數民衆贊成在目前這樣做,是我理解所有關於最佳做法,但試圖堅持他們目前的結構;) – PhearOfRayne

+2

當使用PHP作爲模板語言,即嵌入到HTML的PHP​​,這種風格是更可讀的IMO比其他任何東西。每個語句都以某種方式看起來像一個「標籤」,因此更容易更好地發現/適合HTML,並且結構/流程更清晰。 –

6

或者你可以利用PHP的array_filter功能:

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

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

或簡寫爲:

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