我正在尝试为我的网站创建加权横幅系统。
这是我的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文件中。我只是不知道如何拉出具有最低显示视图的图像。
任何帮助,甚至想法都会非常感激!
答案 0 :(得分: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
我希望有所帮助!对不起,大型评论。无聊。
答案 1 :(得分:0)
您应该考虑使用数据库存储广告,以便查询此数据。使用XML,我不知道比将整个文件读入数组然后在那时对数组进行排序更好的方法,但是使用MySQL或任何其他SQL样式的数据库,您只需运行:
SELECT * FROM ads ORDER BY views LIMIT 1;
这会让你获得最低的观看次数。更新该视图计数也很容易(并且是并发安全的):
UPDATE ads SET views = views + 1 WHERE id = <ID>;
简而言之,关系数据库允许您查询您的数据,而XML文件(至少以其原始形式)只允许您存储它。