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

时间:2013-08-17 22:55:52

标签: php banner sequential rotator

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

下面是我用来读取两个文本文件(存储在我的根目录中扩展名为.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),以便横幅在剩余占位符中重新启动 - 所以这里没有显示空白或空占位符?

我想这可能看起来像一个奇怪的请求。但是,我当然希望了解如何根据目前的情况实现我的目标。

1 个答案:

答案 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