PHP条件处理需要连续显示旋转横幅


PHP conditional processing required to display rotating banners continuously

我正在尝试用横幅旋转器做一些不同的事情。

下面是我用来读取两个文本文件(存储在我的根目录中,扩展名为.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];
}

关于模算子的更多信息可以在这里找到。