首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >连续显示旋转横幅需要PHP条件处理

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

Stack Overflow用户
提问于 2013-08-18 06:55:52
回答 1查看 665关注 0票数 0

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

下面是我用来读取两个文本文件的脚本(存储在我的根目录中,扩展名为.db )来旋转网站上的横幅。一个文件保存一个计数器(FileDB),另一个文件保存HTML banner代码(URLDB)。

URLDB文件当前包含六行HTML代码,用于显示超链接的横幅。

下面的脚本构建了一个数组,并在页面刷新时按从0到5的顺序旋转这些横幅,它完美地完成了这项工作:

代码语言:javascript
运行
复制
<?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代码:

代码语言:javascript
运行
复制
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),以便横幅在剩余占位符中再次重新启动-因此这里没有显示空白或空占位符?

我想这可能看起来是个奇怪的要求。但当然,我会非常感谢任何关于如何根据目前的情况来实现我的目标的建议。

EN

回答 1

Stack Overflow用户

发布于 2013-08-18 07:34:42

一旦你使用了循环,事情就变得更容易操作了。希望下面这篇文章能解决你的问题。

代码语言:javascript
运行
复制
$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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18294066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档