2013-08-17 72 views
0

我試圖做一些與橫幅旋轉器有點不同的東西。連續顯示旋轉橫幅所需的PHP條件處理

下面是我用來閱讀兩個文本文件(存儲在根擴展名爲.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的代碼:在0

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];?> 

與計數的6個橫幅顯示在佔位符1 - 6和佔位符7和8是空白的。

隨着每次刷新,計數器將增加1,顯示第一個放置的持有人中的每個橫幅,並通過每個佔位符從5到0拉動其他橫幅,但留下先前填充的佔位符,直到第六個橫幅佔位符爲止。然後在下一個刷新橫幅1 - 6再次顯示。

發生這種情況是因爲我對每個佔位符中的值進行了硬編碼,我顯然試圖引用文件中超出上述腳本構建的數組邊界的條目。

您可以看到一個工作示例here

我想要實現的是在URLDB中顯示所有橫幅,以便在顯示最後一個條目時,第一個條目顯示在下一個佔位符(在本例中爲佔位符7),第二個條目顯示在佔位符8中。

這個想法是,橫幅不斷移動通過每個佔位符,如列車的車廂,每個頁面刷新和增量的櫃檯 - 一個接着一個。

所以,現在你有背景,對我的問題。

有沒有一種方法可以修改腳本,以便在PHP變量中存儲URLDB文件/數組中最大數量的條目,並隨後在佔位符中添加條件處理以檢查計數器何時達到此最大值,以及引用數組中的下一個有效值(即0),使得橫幅在剩餘佔位符中再次重新啓動 - 所以這裏沒有顯示空白或空的佔位符?

我想這可能看起來像一個奇怪的請求。但是,當然,我會很感激任何關於如何根據目前情況實現我的目標的建議。

+1

我看到這是你的第一篇文章;歡迎來到SO!有幾件事你應該知道。首先,我沒有讀過你的問題,但只是通過審查它,似乎可能會有更多的組織和孤立的問題。用最廣泛的術語解釋問題是最好的。例如,不要說「爲什麼我的$ blah變量不會在以下100行腳本中複製」,請查明真正的問題是什麼,並詢問「爲什麼不使用變量變量時不要複製? 「希望這是有道理的。換句話說,人們對更廣泛(但足夠具體)的問題做出更多回應。 – jeremy

+0

嗨,傑里米,謝謝。我以爲我在我的問題中確實解決了這個問題 - 即試圖給出我已經完成並試圖實現的背景(僅在標題中很難描述)。 – user2692412

回答

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

+0

嗨rc_luke,謝謝代碼和模數運算符的方向,我會去閱讀。 – user2692412

+0

嗨rc_luke,上面的代碼沒有做我所需要的,但我成功地能夠解決如何用簡單的數學和IF條件來做到這一點。非常感謝您回覆。 – user2692412