使用array_rand PHP

时间:2018-01-26 16:10:38

标签: php

我有一个图像列表,我有一个wordpress循环。

我使用randompics()函数生成一个随机图像,用作prreview链接的背景。然而,我发现我在这里和那里生成重复图像并且它看起来不太好。

我想找到一种方法来确保我不会多次拥有相同的图像。在任何一个页面上只有10次循环迭代。

这是我的功能。

function randompics() {
  $arrayName = array(
    get_template_directory_uri().'/images/jobs_large/1.jpg',
    get_template_directory_uri().'/images/jobs_large/2.jpg',
    get_template_directory_uri().'/images/jobs_large/3.jpg',
    get_template_directory_uri().'/images/jobs_large/4.jpg',
    get_template_directory_uri().'/images/jobs_large/5.jpg',
    get_template_directory_uri().'/images/jobs_large/6.jpg',
    get_template_directory_uri().'/images/jobs_large/7.jpg',
    get_template_directory_uri().'/images/jobs_large/8.jpg',
    get_template_directory_uri().'/images/jobs_large/9.jpg',
    get_template_directory_uri().'/images/jobs_large/11.jpg',
    get_template_directory_uri().'/images/jobs_large/12.jpg',    
    //list goes up to 25 images
  );
 echo $arrayName[array_rand($arrayName)];
}

继承我的循环

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

  <div class="item-container">
    <?php randompics(); ?>
  </div>

<?php endwhile; else : endif;?>

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是使用静态变量:

function randompics() {
  static $arrayName = null;
  if (is_null($arrayNme)) {
    $arrayName = array(
      get_template_directory_uri().'/images/jobs_large/1.jpg',
      get_template_directory_uri().'/images/jobs_large/2.jpg',   
      //list goes up to 25 images
    );
    shuffle($arrayName);
  }
  static $index = 0;
  echo $arrayName[$index++];
}

这确实在函数调用之间共享数据,但通常不鼓励这样做。更好的解决方案(至少是恕我直言)将使用ImageRandomiser类并让该类的对象跟踪重复项。

使用,例如:

class ImageRandomiser
{
  private $images;
  private $index;

  public function __construct(string ...$imageUris)
  {
    $this->index = 0;
    $this->images = $imageUris;
    shuffle($this->images);
  }

  public static function fromDefaults() : self
  {
    return new static(
      get_template_directory_uri().'/images/jobs_large/1.jpg',
      get_template_directory_uri().'/images/jobs_large/2.jpg',
      // ...
    );
  }

  public function imageUri() : string
  {
    $this->index++;
    if ($this->index >= count($this->images)) {
      $this->index = 0;
    }
    return $this->images[$this->index];
  }
}

循环:

<?php 
$random = ImageRandomiser::fromDefaults();
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

  <div class="item-container">
    <?php $random->imageUri(); ?>
  </div>

<?php endwhile; else : endif; ?>