Php 使用数组防止重复
我有一个图像列表和一个wordpress循环 我使用randompics()函数生成一个随机图像,用作prreview链接的背景。然而,我发现我在这里和那里生成重复的图像,它看起来不太好 我想找到一种方法,以确保我不会有相同的形象不止一次。在任何一个页面上,循环只有10次迭代 这是我的功能Php 使用数组防止重复,php,Php,我有一个图像列表和一个wordpress循环 我使用randompics()函数生成一个随机图像,用作prreview链接的背景。然而,我发现我在这里和那里生成重复的图像,它看起来不太好 我想找到一种方法,以确保我不会有相同的形象不止一次。在任何一个页面上,循环只有10次迭代 这是我的功能 function randompics() { $arrayName = array( get_template_directory_uri().'/images/jobs_large/1.jpg
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;?>
提前感谢。我想最简单的方法是使用静态变量:
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++];
}
但是,这确实会在函数调用之间共享数据,这通常是不鼓励的。更好的解决方案(至少IMHO)是使用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; ?>
为什么不使用另一个变量作为在每次迭代中递增的索引,然后使用一个
randompics($index)代码>不使用array\u rand()
我的意思是?你可以使用“临时内存”。如果此生成是基于用户的,则可以使用$\u SESSION变量存储已显示的图像,否则可以选择基于文件的临时内存进行存储。创建一个图像数组,将其洗牌,然后按顺序从数组中拾取…