我正在尝试用横幅旋转器做一些不同的事情。
下面是我用来读取两个文本文件(存储在我的根目录中扩展名为.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显示为空白。
每次刷新时,计数器都会增加1,在第一个放置的持有者中显示每个横幅,并将每个占位符中的其他横幅从5拉到0,但将先前填充的占位符留空,直到第六个横幅位于占位符1中。然后在下一个刷新横幅1 - 6再次显示。
这是因为我已经硬编码了每个占位符中的值,我显然试图引用文件中的条目,该条目超出了上述脚本构建的数组的范围。
您可以看到一个有效的例子here。
我想要实现的是在URLDB中显示所有横幅,这样当显示最后一个条目时,第一个条目显示在下一个占位符(在本例中为占位符7),第二个条目显示在在占位符8中。
这个想法是横幅连续移动通过每个占位符,如火车的车厢,每个页面刷新和计数器的增量 - 一个跟随另一个。
所以,现在你有了我的问题的背景。
有没有办法可以修改脚本以在PHP变量中存储URLDB文件/数组中的最大条目数,然后在占位符中添加条件处理以检查计数器何时达到此最大值,并引用数组中的下一个有效值(即0),以便横幅在剩余占位符中重新启动 - 所以这里没有显示空白或空占位符?
我想这可能看起来像一个奇怪的请求。但是,我当然希望了解如何根据目前的情况实现我的目标。
答案 0 :(得分: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];
}
有关模数运算符的更多信息可以是found here。