【问题标题】:php random number within range - no repeat范围内的php随机数 - 不重复
【发布时间】:2017-02-13 22:45:49
【问题描述】:

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

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

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

【问题讨论】:

  • 随机数,不重复严格来说不是随机数
  • 你在一页上放了多少个
  • @RiggsFolly 多个。取决于帖子数。
  • 我认为 EDIT 是对问题的一个足够大的更改,以保证您将其作为一个新问题提出

标签: php random numbers


【解决方案1】:

我会做一个rangeshuffle

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

【讨论】:

  • 最好将数组设为静态并一次弹出一个值。但是使用 shuffle() 既优雅又简洁。
  • @RiggsFolly 没想到你会这样。只需循环$myRange,这就是我的意图。
  • 我确实说过我可能误解了如何正确运行8次
  • @PraveenKumar 恐怕谷歌翻译做得不好,但我猜泰米尔语
  • @RiggsFolly 谷歌翻译在南印度语言方面还是个婴儿。
【解决方案2】:

此代码可防止重复并适用于任何其他测试用例场景。洗牌不是必需的,随机元素基于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() 函数退出循环。

【讨论】:

  • 这看起来不错,但应该echo $a[$randomKey]; 并将unset 移动到您回显数字后!!!!!!
  • 顺序无关紧要。您可以随心所欲,测试部分仅供参考。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    您可以使用uniqid() 函数和md5 来加强结果:

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

    或使用shuffle

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

    【讨论】:

    • 不防止重复。
    • 而且 uniqid() 和 md5() 不会使结果更加随机。
    • 也许,但这是一个开始。同样在循环中,他可以在每个数字的末尾添加一个计数器,使其更加独特。请发布一个更好的答案。我敢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    相关资源
    最近更新 更多