2012-10-28 103 views
1

我通過從橫幅數組中隨機選擇一個橫幅,在我的網站上旋轉橫幅。PHP的高效橫幅旋轉

示例代碼演示:

<?php 
$banners = array(
'<iframe>...</iframe>', 
'<a href="#"><img src="#.jpg" alt="" /></a>', 
//and so on 
); 
echo $banners(rand(0, count($banners))); 
?> 

橫幅的陣列已經變得相當大。我關心這個數組添加到我的頁面執行中的內存量。 但我找不出一個更好的方式顯示一個隨機的橫幅沒有加載所有的橫幅到內存中...

+2

你橫幅存儲在數據庫中?如果是的話,你可以使用SQL隨機;) – ChaosClown

+0

http://php.net/manual/en/function.array-rand.php – 2012-10-28 10:44:33

回答

2

將橫幅移動到html文件,並更改數組只包含文件名。

然後你可以包含該文件的名稱,只加載所需的橫幅。

+0

我最喜歡這個想法。它將增加比數據庫更多的工作,但實施起來更容易。 – reggie

3

創建數據庫以存儲橫幅。然後,當您執行頁面加載時,可以使用SQL查詢來選擇一個隨機行。

SELECT * FROM banners ORDER BY RAND() LIMIT 1 
+1

一個sqlite數據庫應該做的,如果你還沒有。 – DanMan

+0

如果我是用MySQL做的,它會在頁面加載中添加另一個查詢。有另一個查詢將超過節省頁面加載一些內存的優勢。 DanMan,我最近才發現SQLLite。但我想這將是解決我的問題。 – reggie

0

一個辦法做到這一點,而無需陣列存儲器或數據庫,是按照增量映像的命名約定,例如命名您的圖片「banner1.jpg」,「banner2.jpg」,等等,那麼你可以只是這樣做:

$int_banners = 10; // the number of banner images you have 
$i = rand(1, $int_banners); 
echo "<a href='#'><img src='banner$i.jpg' alt=''></a>"; // add an iframe too if you want 

如果你不能使用這樣的約定,那麼你可以只使用文件名的數組(或使用SQL數據庫來存儲橫幅,在其他的答案的建議)。

$lst_banners = array("img1.jpg", "/home/img2.jpg", "/about/img3.jpg"); 
$int_banners = count($lst_banners); 
$i = rand(0, ($int_banners - 1)); 
echo "<a href='#'><img src='" . $lst_banners[$i] . "' alt=''></a>"; 

或者更好的,你可以使用array_rand()找到的文件名,由Zlatan的建議:

$lst_banners = array("img1.jpg", "/home/img2.jpg", "/about/img3.jpg"); 
$name = array_rand($lst_banners, 1); 
echo "<a href='#'><img src='$name' alt=''></a>"; 
+1

沒有解釋的downvote是一個怯懦downvote。 – Stefan

+0

@reggie:謝謝 - 我沒有真正懷疑你! – Stefan