【问题标题】:Loop through array and return values and HTML循环遍历数组并返回值和 HTML
【发布时间】:2012-03-10 06:52:37
【问题描述】:

我将帖子 ID 存储在一个数组中。我想遍历数组并在包含<p><ul> 标签的<div> 中显示ID,但前提是数组中至少有一个ID。如果数组为空,则无法返回 html。这意味着我应该在循环之前使用某种 if 语句。不用说,我的 php 技能非常基础,经过两天的努力,我一无所获。感谢帮助!

我的代码(使用 Wordpress)

$postids = array();

...

$postids [] = $post->ID; //stores the post IDs in the array

这是一个更新。我很抱歉发布所有这些代码,因为它对很多事情都非常混乱。这是三个(或更多)的第二个循环。在几乎相同的第一个循环中显示的 ID 已被传递。仅显示上一个循环未检索到的那些 ID,以免显示任何重复的帖子。

我尝试删除所有 HTML 标记并在之后使用新的 WP_Query 查询 $postids,但这会检索我曾经创建的所有帖子。我很确定这是继续的正确方法,尽管我显然做错了。

<?php
$tags = wp_get_post_tags($post->ID);
if ($tags) {
  $first_tag = $tags[1]->term_id;
  $args=array(
    'tag__in' => array($first_tag),
    'post__not_in' => array($post->ID),
    'showposts'=>5, //Display this number of related posts
    'ignore_sticky_posts'=>1
   );
  $postids = array();
  $my_query = new WP_Query($args);
  if( $my_query->have_posts() ) {
      echo '<ul id="relatedposts">'; 
      while ($my_query->have_posts()) : $my_query->the_post(); if (!in_array($post->ID, $ids)) {; $postids [] = $post->ID; ?>
      <li><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
      <?php }
    $ids[]= $post->ID; 
    endwhile;
  }
}
?>
      </ul>
<?php if ($postids){ //$postids has at least one value set
    echo '<div>Related posts</div>'; //Outputting the header text. This works! If there are no IDs in the array nothing is shown.
     }; 
?>

【问题讨论】:

  • 基本上我已经尝试弄清楚如何使用以下&lt;?php if (have_posts()) : ?&gt; &lt;div&gt;&lt;p&gt;header text&lt;/p&gt; &lt;?php while (have_posts()) : the_post(); ?&gt; do stuff... &lt;!--get the permalink, title etc...--&gt; &lt;?php endwhile; ?&gt; &lt;/div&gt; &lt;?php endif; ?&gt; 循环数组但没有任何运气!

标签: php arrays loops if-statement while-loop


【解决方案1】:

这应该可行:

 <?php

 // assuming you have an array of ids called $postids

 if(count($postids)){
    echo "<div><ul>";
    foreach($postids as $id){
       echo "<li>$id</li>";
    }
    echo "</ul></div>";
 }


 ?>

分解:

if(count($ids)){

count() 返回数组$ids 中的元素数。除零以外的任何数字都将计算为true 并输入if 语句,零将计算为false 并跳过整个过程。

 foreach($ids as $id){

这将遍历数组$ids 中的每个元素,并将其分配给变量$id。希望echo 语句是不言自明的。

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点。

    if ($postids){ //$postids is TRUE (ie $postids is not an empty array)
         //do your output
    }
    

    if(count($postids) > 0){ //$postids has at least one value set
        //do your output
    }
    

    习惯于简单的 true 和 !false 测试是你的朋友

    【讨论】:

    • 谢谢。您的建议效果很好,但问题是我在执行 if 条件之前遍历了数组。如果我把它放在我的循环中,它将为循环中检索到的每个帖子输出
      用于标题文本,并且能够根据我的喜好设置标题的样式。在包含帖子的
        之后输出标题看起来非常无望,充其量只能与一些丑陋的位置 css hacks 一起使用。我会尝试更新我的问题并包含我的代码,希望它会更有意义。
    • 谢谢弗雷德! Gordon 的解决方案开箱即用。我敢打赌,只要我的技能更好地完成最后一步,你的问题也能解决。
    【解决方案3】:

    也许是这样的?您应该自定义此代码以检索帖子的内容,或者您​​想做的任何事情。

    <?php
    $postIds = array(1, 2, 3, 4, 5);
    ?>
    <html>
    <head>
        <title>Post IDs!</title>
    </head>
    <body>
        <h1>Post IDs!</h1>
    <?php if(empty($postIds)): ?>
        <p>There are no post IDs :(</p>
    <?php else: ?>
        <ul>
    <?php foreach($postIds as $postId): ?>
            <li><?php echo $postId; ?></li>
    <?php endforeach; ?>
        </ul>
    <?php endif; ?>
    </body>
    </html>
    

    【讨论】:

    • 谢谢模糊!我有两个建议可以帮助我解决问题。您的建议看起来符合 Gordon 的解决方案。
    【解决方案4】:

    感谢 Gordon 的大力帮助,我现在有了一个可行的解决方案。所有的 html 都从上面凌乱的原始代码中删除。以下 if 语句和 foreach 循环以简单方便的方式回显 html。和标签的样式现在非常简单。

    <?php
      if(count($postids)){
        echo "<div>Related posts<ul>";
        foreach($postids as $id){
           echo '<li><a href="'.get_permalink( $id ).'">'.get_the_title( $id ).'</a></li>';
        }
        echo "</ul></div>";
      }
    ?>   
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签