我有以下代码用于从文件夹中随机显示PHP小部件:
<?php
function random_widget($dir = 'wp-content/themes/zonza/elements')
{
$files = glob($dir . '/*.*');
$file = array_rand($files);
return $files[$file];
}
?>
<?php include random_widget();?>
<?php include random_widget();?>
<?php include random_widget();?>
random_widget();输出一个URL,然后我在include函数中使用它来显示小部件。
代码随机选择6个php文件并随机显示一个。我包括它3次获得3个小部件。但是,我有时会多次显示相同的小部件。
如何修改代码以防止这种情况发生?
答案 0 :(得分:2)
试试这个:
<?php
function random_widget($dir = 'wp-content/themes/zonza/elements')
{
static $files = false;
if(!$files) $files=glob($dir . '/*.*');
$key = array_rand($files);
$file=$files[$key];
unset($files[$key]);
return $file;
}
?>
它的工作原理是删除$ files返回的文件,并在多个函数调用上维护$ files(第一次调用函数时它只是globs())
答案 1 :(得分:0)
在页面开头声明文件$files = glob($dir . '/*.*');
在random_widget中,在拉取值后执行此unset($files[$file])
。
答案 2 :(得分:0)
array_rand
将数字$num_req
作为可选的第二个参数,指定要选择的条目数。因此,将此参数添加到random_widget
,将其传递给array_rand
以获取密钥数组而不是单个密钥,返回文件数组,然后遍历此数组以包含小部件(而不是呼叫random_widget
三次。)
<?php
function random_widget($num_req, $dir = 'wp-content/themes/zonza/elements')
{
$files = glob($dir . '/*.*');
$keys = array_rand($files, $num_req);
$chosen = array();
foreach($keys as $key) {
$chosen[] = $files[$key];
}
return $chosen;
}
$widgets = random_widget(3);
foreach($widgets as $widget) {
include $widget;
}
?>
此解决方案优于其他答案中提出的解决方案的一个优点是它是无状态的:您可以根据需要在不同的上下文中重用该函数。