循环遍历数组并返回值和HTML

时间:2012-02-19 19:39:18

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

我将帖子ID存储在一个数组中。我想遍历数组并在包含<div><p>标记的<ul>中显示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.
     }; 
?>

4 个答案:

答案 0 :(得分:3)

这应该有效:

 <?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语句是自我解释的。

答案 1 :(得分:1)

有几种方法可以做到。

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

OR

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

感谢戈登的大力帮助,我现在有了一个有效的解决方案。从上面凌乱的原始代码中删除所有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>";
  }
?>