我正在尝试用横幅旋转器做一些不同的事情。
下面是我用来读取两个文本文件(存储在我的根目录中,扩展名为.db)以旋转网站上的横幅的脚本。一个文件包含一个计数器(FileDB),另一个文件则包含HTML标题代码(URLDB)。
URLDB文件目前包含六行HTML代码,用于显示超链接横幅。
下面的脚本构建了一个数组,并在页面刷新时从0到5依次旋转这些横幅,它完美地做到了这一点:
<?php
define('FILEDB', '/WORKING DIRECTORY/count.db');
define('URLDB', '/WORKING DIRECTORY/url.db');
function readURLS()
{
$fo = fopen(URLDB, 'r');
if( null == $fo )
return false;
$retval = array();
while (($line = fgets($fo)) !== false)
{
$retval[] = $line;
}
return $retval;
}
$list = readURLS();
if( false === $list )
{
echo "No URLs available";
}
else
{
$fo = fopen(FILEDB, 'a+');
$count = (fread($fo, filesize(FILEDB)) + 1) % count($list);
ftruncate($fo, 0);
fwrite($fo, "{$count}");
fclose($fo);
echo $list[$count];
}
?>
在我想展示横幅的网页上有八个占位符。然而,我只有六条横幅。
以下是每个占位符中的PHP代码:
Placeholder 1: <?php echo $list[$count];?>
Placeholder 2: <?php echo $list[$count +1];?>
Placeholder 3: <?php echo $list[$count +2];?>
Placeholder 4: <?php echo $list[$count +3];?>
Placeholder 5: <?php echo $list[$count +4];?>
Placeholder 6: <?php echo $list[$count +5];?>
Placeholder 7: <?php echo $list[$count +6];?>
Placeholder 8: <?php echo $list[$count +7];?>
计数为0时,6条横幅显示在占位符1-6中,占位符7和8为空。
每次刷新时,计数器都会增加一,将每个横幅显示在第一个占位符中,并将其他横幅从5拉到0,但将之前填充的占位符留空,直到第六个横幅位于占位符一中。然后在下一次刷新横幅1-6再次显示。
之所以会出现这种情况,是因为我已经对每个占位符中的值进行了硬编码,而且我显然试图引用文件中超出上述脚本构建的数组范围的条目。
你可以在这里看到一个工作示例。
我试图实现的是在URLDB中显示所有横幅,这样当显示最后一个条目时,第一个条目显示在下一个占位符(在这种情况下是占位符7)中,而第二个条目则显示在占位符8中。
其想法是,横幅像火车车厢一样,在每个占位符中不断移动,计数器的每一页都在刷新和增加——一页接一页。
那么,现在你有了我的问题的背景。
有没有一种方法可以修改脚本,将URLDB文件/数组中的最大条目数存储在PHP变量中,然后在占位符中添加条件处理,以检查计数器何时达到这个最大值,并引用数组中的下一个有效值(即0),以便横幅在剩余占位符中再次启动-所以这里没有显示空白或空占位符?
我想这似乎是一个奇怪的要求。但我当然会感谢任何关于如何根据目前的情况实现我的目标的建议。
一旦使用循环,操作起来就会变得更容易。希望以下内容能解决您的问题。
$numOfBanners = count($list);
$numOfPlacements = 8;
for ($i=0; $i < $numOfPlacements; $i++) {
// use the modulus operator to come back around
$bannerID = $i % $numOfBanners;
echo $list[$bannerID];
}
关于模算子的更多信息可以在这里找到。