在同一个脚本中有多个mt_rand

时间:2014-06-18 20:00:10

标签: php wordpress

我有一个WordPress的随机评论脚本,我一直在使用它作为小部件。它只显示一条评论,但现在我需要它显示三条评论。我尝试添加新变量并输出复制现有代码但是它多次生成相同注释的可能性比我想象的要多得多。任何建议将不胜感激。

这里是显示一条评论的原始代码:

<div style="width:276px;margin:0 15px">
<h2>Testimonials</h2>
<div style="background:rgba(65, 115, 148, 0.3);border-radius:0 0 6px 6px;height:265px;border:1px solid #ddd;box-shadow:0 0 3px #fff;padding:5px;overflow-y:auto">

<?php
   $post_id = 276;  // Put the 'testimonials' id here
   $comments = get_comments("post_id=$post_id&status=approve");
   if ($comments) {
     $ndx = mt_rand(2,sizeof($comments)) - 1;
     $comment = $comments[$ndx];
?>

<p style="margin-bottom:20px">
<span style="float:left;margin-right:3px"><?php echo get_avatar($comment->comment_author_email, 48, $default, $alt ); ?></span>
    <?php
        if (empty($comment->comment_author)){echo "$comment->comment_author";}
        else{echo "<a href='$comment->comment_author_url'>$comment->comment_author</a>";}
    ?>
 - <?php echo "$comment->comment_date"; ?><br />
<?php echo "$comment->comment_content"; ?></p>
<span style="float:right;margin-right:3px;"><?php echo "$comment1->extra_sitename"; ?></span>

<?php } ?>

</div>
</div>

2 个答案:

答案 0 :(得分:1)

也许是另一种方法 假设您构建了一系列可用的注释ID。

$commIDs = array(4,34,56,76,100); // comment id from database

然后你可以使用array_rand()来获得这个数组的3个随机id。

$choosenIDs = array_rand($commIDs, 3);

然后,您可以根据选定的ID从db获取数据 这接近你想要的吗?

编辑:第二个解决方案
您可以直接从数据库中获取3个随机记录。

Select field FROM table WHERE field2='$value' ORDER BY RAND() LIMIT 3;

答案 1 :(得分:0)

如果我们"unset"从数组中选择了随机值,我们可以选择另一个而不用担心重复。请注意,我从零开始mt_rand并从1减去sizeof

<?php
$pid = get_the_ID();
$comments = get_comments("post_id=$pid&status=approve");
if ($comments) {       
    $ndx = mt_rand( 0, sizeof( $comments ) -1 );
    $comment = $comments[$ndx];
    array_splice( $comments, $ndx, 1 );

    $ndx = mt_rand( 0, sizeof( $comments ) -1 );
    $comment = $comments[$ndx];
    array_splice( $comments, $ndx, 1 );

    $ndx = mt_rand( 0, sizeof( $comments ) -1 );
    $comment = $comments[$ndx];
    // array_splice( $comments, $ndx, 1 ); // only needed if you'll keep showing comments
}
?>