我正在尝试做一些与横幅旋转器有点不同的事情。
下面是我用来读取两个文本文件的脚本(存储在我的根目录中,扩展名为.db )来旋转网站上的横幅。一个文件保存一个计数器(FileDB),另一个文件保存HTML banner代码(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),以便横幅在剩余占位符中再次重新启动-因此这里没有显示空白或空占位符?
我想这可能看起来是个奇怪的要求。但当然,我会非常感谢任何关于如何根据目前的情况来实现我的目标的建议。
发布于 2013-08-18 07:34:42
一旦你使用了循环,事情就变得更容易操作了。希望下面这篇文章能解决你的问题。
$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。
https://stackoverflow.com/questions/18294066
复制相似问题