【问题标题】:PHP echo as condition inside PHP if statementPHP 回显作为 PHP if 语句中的条件
【发布时间】:2014-12-18 15:19:57
【问题描述】:

我想在 PHP if 语句中使用 PHP 回显作为条件。

目的是让 John Doe 撰写的博客文章列表显示在他的传记页面上。

我在if条件中直接写了作者的名字就成功了:

<!-- current page: biography page -->

<div id="list_of_articles_by_John_Doe">

    <?php foreach(page('magazine')->children() as $article): ?>

        <?php if($article->author() == 'John Doe'): ?>
            <p><?php echo $article->title() ?></p>
        <?php endif ?>

    <?php endforeach ?>

</div>

但我想自动化这个过程,让每个作家的传记页面都有自己的文章列表。

我试图以当前传记页面($page)的作者为条件:

<!-- current page: biography page -->

<div id="automatic_list_of_articles">

    <?php foreach(page('magazine')->children() as $article): ?>

        <?php if($article->author() == $page->author()): ?>
            <p><?php echo $article->title() ?></p>
        <?php endif ?>

    <?php endforeach ?>

</div>

但它带来了另一个问题:它不起作用,因为在 foreach 语句中,$page-&gt;author()(if 语句中的条件)不会回显作者一次,而是每个@987654324 回显一次@。

条件if($article-&gt;author() == $page-&gt;author()) 在这种情况下不起作用,因为$page-&gt;author() 并不是严格意义上的作者姓名。

我想知道如何在 foreach 语句中调用 $page-&gt;author() 以仅回显作者的姓名一次。

【问题讨论】:

  • 我建议你在foreach和if语句之间回显文章作者和页面作者,看看值是否相似。这是比较的正确方法: $article->author() == $page->author()) 不是你的回声方式
  • PHP 不可递归嵌入,嵌入在 php 字符串中的 php 代码不会被执行。
  • 尝试呼应您的文章作者以确定它是否定义明确。
  • @Raoulito,page('magazine') 是什么,为什么它没有以 $ 作为数组/对象变量预置,它是否被 $page-&gt;author() 包裹起来?
  • 我在下面提供了一个工作示例,假设我正确解释了您的数据。

标签: php if-statement echo


【解决方案1】:

可以选择将所有作者保存在一个数组中

// if article->author() isn't within the array
$authors[] == $article->author();

之后,您可以按照以下方式进行:

<?php foreach($authors as $author){ ?>
    <?php foreach(page('magazine')->children() as $article): ?>

        <?php if($article->author() == $author()): ?>
            <p><?php echo $article->title() ?></p>
        <?php endif ?>

    <?php endforeach ?>
<?php } ?>

这应该可以,即使你必须做 2 次 foreachs

【讨论】:

    【解决方案2】:
        <?php if( $article->author() == $page->author() ) { ?>
            <p><?php echo $article->title(); ?></p>
        <?php } ?>
    

    应该可以,但你也可以试试

        <?php 
        if( $article->author() == $page->author() ) {
            echo "\n<p>", $article->title(), "</p>\n";
        }
        ?>
    

    在我看来,它看起来“更干净”;但是您必须查找丢失的空格

    【讨论】:

    • 这行不通,因为他说 $page->author() 只回应一篇文章
    • 啊,我明白了,我没有答对问题。现在我明白了,但我不明白 Raoulito 的意图。
    • 他正试图找到一种方法来让所有文章标题按作者排序
    【解决方案3】:

    我建议尝试将它也设置为一个变量,然后在 if 语句中使用该变量。

    <?php foreach(page('magazine')->children() as $article): ?>
    
        <?php $condition = $page->author()?>
    
        <?php if($article->author() == $condition  ?>'): ?>
             echo "\n<p>", $article->title(), "</p>\n";
        <?php endif ?>
    
    <?php endforeach ?>
    

    我不确定我的语法是否正确,但我认为这符合他们的思路。

    【讨论】:

      【解决方案4】:

      您不能在条件中使用 echo,因为它是一种特殊的语言构造,将给定的内容发送到输出流并且它不返回任何值。

      【讨论】:

      • 我没有看到任何使用 echo 语句返回值(或没有返回值)。
      【解决方案5】:

      你确定你不应该有这个吗?

      <div id="automatic_list_of_articles">
      
          <?php $page = page('magazine'); ?>
      
          <?php foreach($page->children() as $article): ?>
      
              <?php if($article->author() == $page->author()): ?>
                  <p><?php echo $article->title() ?></p>
              <?php endif ?>
      
          <?php endforeach ?>
      
      </div>
      

      我已经重建了看起来是您的数据的近似值,您可以在下面的链接中看到它的工作原理。它正确地呼应了多篇文章的标题。

      工作示例:

      http://ideone.com/jvLVhF

      在这个例子中,您可以看到上面的 PHP 工作正常,这可能是一个数据问题(即,您可能应该使用 $page 而不是在 foreach 语句中调用函数)。

      【讨论】:

      • 问题实际上是在foreach($page-&gt;children() as $article): 内部,作者的名字$page-&gt;author() 会为每个$page-&gt;children() as $article 回显一次。所以 if 条件 不能再工作了。
      • 在示例中运行良好 - 输出位于链接底部。当然,这是对您的数据形状的假设,如果您可以提供有关所涉及数据结构的更多详细信息,我很乐意提供帮助。
      猜你喜欢
      • 2017-05-23
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2017-03-04
      • 2015-07-28
      • 1970-01-01
      相关资源
      最近更新 更多