Php 循环遍历对象数组

Php 循环遍历对象数组,php,Php,我有一个名为$pages的数组,其内容如下: Array ( [01-about-us] => Page Object ( [_uri] => about-us [_menuItem] => 01 [_visable] => 1 ) [02-contact] => Page Object ( [_uri] => contact [_menuItem] =&

我有一个名为$pages的数组,其内容如下:

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

  • 页面

  • 否。如果出现以下情况,您必须使用

    foreach ($pages as $page) {
        if ($page->_visible == 1) {
            echo "<li>page</li>";
        }
    }
    
    foreach($page作为$page){
    如果($page->_visible==1){
    回声“
  • 页面”
  • ”; } }

    (请注意,您在数组中拼写错误
    visible
    ,可能是拼写错误?

    您只需在页面数组中循环,并在循环中访问对象属性,如:

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

  • 请注意,visable拼写错误,但您的问题就是这样的

    或者您可以利用PHP的
    数组过滤器
    功能:

    $pagesVisible=array\u filter($page,function($page){
    返回(bool)$page->\u可见;
    });
    foreach($pagesVisible as$key=>$page){
    打印“
  • ”.$key.
  • ”; }
    或将其简写为:

    $filter = function($page) {
        return (bool) $page->_visible;
    };
    foreach (array_filter($pages, $filter) as $key => $page) {
        print '<li>' . $key . '</li>';
    }
    
    $filter=函数($page){
    返回(bool)$page->\u可见;
    };
    foreach(数组_过滤器($pages,$filter)作为$key=>$page){
    打印“
  • ”.$key.
  • ”; }
    您的意思是只获取在这种情况下可见的对象吗?只需在数组上正常循环,并在循环中使用
    if
    语句来确定每个页面对象是否可见,以及是否应呈现列表元素。有两件事:1:拼写不一致
    可见
    。2:在数组中,您将
    visable
    作为字段,在
    foreach
    中作为方法。我认为输出中的前导下划线(
    .
    )表示私有属性。。。不过,我最近没有经常使用PHP,所以我可能错了。@FelixKling PHP有一个
    private
    关键字。我不知道我是否没有OP的
    页面
    类的类定义。他在自己的代码中使用它,所以我认为这是知道页面是否可见的方法。不过,它可能应该使用一种方法。非常感谢这只是一个拼写问题,我想我快疯了。啊,显然私有属性的后缀是
    :private
    :。nvm那么:)为什么所有的
    标签?因为OP目前就是这样做的,是的,我了解所有关于最佳实践的内容,但试图坚持他们当前的结构;)当使用PHP作为模板语言时,即将PHP嵌入到HTML中时,这种风格在我看来比任何其他风格都更具可读性。每个语句在某种程度上看起来像一个“标记”,因此更容易在HTML中发现/更适合,结构/流程更清晰。
    $filter = function($page) {
        return (bool) $page->_visible;
    };
    foreach (array_filter($pages, $filter) as $key => $page) {
        print '<li>' . $key . '</li>';
    }