范围内的php随机数 - 不重复

时间:2016-10-05 13:06:15

标签: php random numbers

到目前为止还没能找到我要找的东西,所以我正在寻求帮助。

我有一个div,需要以1到8之间的数字结尾,我需要它是一个随机数,不重复...

<div class="parallax parallax_<?php echo $random_number ?>"></div>

我认为这应该很简单,但我遇到了麻烦。

目前,我有:

<div class="parallax parallax_<?php echo rand(1, 8); ?>"></div>

有效,但会产生重复。

修改

经过测试,我意识到我遇到了问题。我在wordpress模板中使用它。我正在查询一组6个帖子,对于每组帖子,我都包括上面的视差div。所以,我为每个查询得到一个随机的,没有重复的数字,但每个查询重置数字 - 给我重复...这是我的整个代码。

<?php
  $args = array(
    'post_type'        => 'post',
    'orderby'          => 'menu_order',
    'posts_per_page'   => -1,
    'order'            => 'ASC'
  );
  $posts = get_posts( $args );
?>

<?php foreach (array_chunk($posts, 6, true) as $posts) :  ?>
  <div class="parallax parallax_<?php echo rand(1, 8); ?>"></div>
  <div class="posts_container">  
    <?php foreach( $posts as $post ) : setup_postdata($post); ?>

      <div class="post">
        <div class="post__thumbnail"><a href="<?php the_permalink();?>"><?php the_post_thumbnail(); ?></a></div>
        <div class="post__title"><?php the_title(); ?></div>
      </div>

    <?php endforeach; ?> 
  </div>
<?php endforeach; ?>

4 个答案:

答案 0 :(得分:4)

此代码可防止重复并适用于任何其他测试用例场景。不需要随机播放,随机元素基于array_rand()函数。

要重复选择新的随机密钥,必须在循环中使用代码。

// Array declaration
$a=array(1,2,3,4,5,6,7,8);

// Loop
$randomKey=array_rand($a);
unset($a[$randomKey]);

// Test
echo $randomKey."<br>";
var_dump($a);

首先,它定义了一个所需的数字数组。比挑选数组中的随机密钥。它也没有从数组中取消,因此不会再使用它。

重复操作$randomKeyunset()应该循环播放。 Echo和var_dump()功能仅用于测试目的。数组大小可以减少未设置的已使用键或保持相同的长度,从循环中留下unset()函数。

答案 1 :(得分:2)

我会做rangeshuffle

$myRange = range(1, 8);
shuffle($myRange);
return $myRange[0];

答案 2 :(得分:0)

您可以使用uniqid()功能和md5来强化结果:

 md5(uniqid(rand(1, 8), true));

或使用shuffle

$numbers = range(1, 8);
shuffle($numbers);

foreach ($numbers as $number) {
    echo "$number ";
}

答案 3 :(得分:0)

我认为这可以帮到你。 shuffle() here

<?php
$numbers = range(1, 8);
shuffle($numbers);
foreach ($numbers as $number) {
    echo "$number ";
}