2011-04-16 42 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