2011-04-16 21 views
1

我想爲我的網站創建一個加權的橫幅系統。用xml和php返回最低視圖的圖像?

這是我的XML:

<banners> 
    <images> 
     <src>banners/ad_1.png</src> 
     <alt>Banner ad 1</alt> 
     <views>9</views> 
    </images> 
    <images> 
     <src>banners/ad_2.png</src> 
     <alt>Banner ad 2</alt> 
     <views>9</views> 
    </images> 
</banners> 

我想顯示的最低查看圖像。獲得該圖像後,增加視圖以顯示橫幅已顯示。

我不想使用simpleXML。所有DOM操作,將直接使用這個變量$dom

$dom = new DOMDocument(); 
$dom->load($file_name); 

我一直在這3小時以上,我的代碼只是不斷變得越來越大。我已經想出瞭如何增加它並將其放回到XML文件中。我只是不知道如何拉取最低視圖的圖像進行展示。

任何幫助,甚至想法都會非常感謝!

回答

1
$images = $dom->getElementsByTagName("images"); //Grab all image nodes 
$views = array(); //Set up array for src and viewcount data 
foreach($images as $image){ //Loop through all image nodes 
    $src = $image->getElementsByTagName("src")->nodeValue; //Get the src 
    $views[$src] = $image->getElementsByTagName("views")->nodeValue; //Add the viewcount to the array and use src as the array key 
} 
asort($views); //Sort the array by viewcount (low->high) 
$src = array_keys($views); //Extract keys (or src) 

$lowestViews = $views[0]; //Var for lowest number of views 
$lowestSrc = $src[0]; //Var for the src of the lowest viewed image 

我希望有幫助!很抱歉評論。無聊。

+0

我曾嘗試過,但它會迫使我使用靜態替代文本。你實際上讓我想到了,而且我使用了array_multisort。代碼有點長,雖然... – Phil 2011-04-16 21:57:39

+0

公平不夠,只要你有一些工作。使用dom方法永遠不會特別有效。 – Calum 2011-04-16 21:59:17

+0

我討厭使用它。這實際上是一個學校項目......可能應該包括作業標籤。感謝您的時間,他是一個滿意的人! – Phil 2011-04-16 22:01:45

0

您應該考慮使用數據庫來存儲您的廣告,以便您可以查詢此數據。對於使用XML,我不知道有什麼比將整個文件讀入數組然後對該數組進行排序,但是使用MySQL或任何其他SQL風格的數據庫,只需運行:

SELECT * FROM ads ORDER BY views LIMIT 1; 

而這會讓你獲得最低的觀看次數。更新這一觀點計數是容易的(和併發安全)太:

UPDATE ads SET views = views + 1 WHERE id = <ID>; 

總之,關係數據庫可以讓你查詢您的數據,而一個XML文件(至少在其原始形式)只允許你它。

+0

我在使用XML,很抱歉。 – Phil 2011-04-16 21:41:15

+1

+1使用數據庫也使得線程問題遠不如頭痛 - 例如爲用戶1加載頁面。它找到具有最低視圖(例如3個視圖)的橫幅。在寫入文件之前,用戶2訪問該站點,並找到與用戶1相同的橫幅(仍有3個視圖)。用戶1的頁面將視圖值爲4的XML寫入。用戶2的頁面現在也是如此。結果 - 橫幅顯示5次,視圖計數爲4.這也沒有考慮文件系統上的問題(同時寫入同一文件通常會導致訪問違規) – Basic 2011-04-16 21:43:14

+0

不夠公平,只是一個建議。我的建議仍然存在;以XML格式(或任何平面文件格式,如JSON,CSV等)存儲這種快速變化的數據將會給您帶來長期的問題。編輯:基本上,什麼Basiclife說。 (Pun沒有打算) – 2011-04-16 21:43:54