【问题标题】:Display random elements from XML in PHP在 PHP 中显示来自 XML 的随机元素
【发布时间】:2013-05-27 20:35:03
【问题描述】:

我认为我的问题很简单,但我找不到任何可以匹配我的东西。我有一个 PHP 文件,它使我能够显示来自 XML 文件的信息。我想从该文件中显示 3 个随机元素。

这是我的 XML

<?xml version="1.0" encoding="UTF-8"?>
<items>
    <item>
        <id>1</id>
        <thumb>images/portfolio/thumb/website1.jpg</thumb>
        <titre>website1</titre>
        <description>Lorem ipsum.</description>
        <image>images/portfolio/website1.jpg</image>
        <category>Cat 1</category>
        <link>portfolio.html</link>
    </item>
    <item>
        <id>2</id>
        <thumb>images/portfolio/thumb/website2.jpg</thumb>
        <titre>website2</titre>
        <description>Lorem ipsum.</description>
        <image>images/portfolio/website2.jpg</image>
        <category>Cat 2</category>
        <link>portfolio.html</link>
    </item>
    <item>
        <id>3</id>
        <thumb>images/portfolio/thumb/website3.jpg</thumb>
        <titre>website3</titre>
        <description>Lorem ipsum.</description>
        <image>images/portfolio/website3.jpg</image>
        <category>Cat 3</category>
        <link>portfolio.html</link>
    </item>
    <item>
        <id>4</id>
        <thumb>images/portfolio/thumb/website4.jpg</thumb>
        <titre>website4</titre>
        <description>Lorem ipsum.</description>
        <image>images/portfolio/website4.jpg</image>
        <category>Cat 4</category>
        <link>portfolio.html</link>
    </item>
    <item>
        <id>5</id>
        <thumb>images/portfolio/thumb/website5.jpg</thumb>
        <titre>website5</titre>
        <description>Lorem ipsum.</description>
        <image>images/portfolio/website5.jpg</image>
        <category>Cat 5</category>
        <link>portfolio.html</link>
    </item>
    <item>
        <id>6</id>
        <thumb>images/portfolio/thumb/website6.jpg</thumb>
        <titre>website6</titre>
        <description>Lorem ipsum.</description>
        <image>images/portfolio/website6.jpg</image>
        <category>Cat 6</category>
        <link>portfolio.html</link>
    </item>
</items>

在那里,我的 PHP 用于显示我的 XML 元素。

<?php
    $xmldata = simplexml_load_file('portfolio.xml');
    foreach($xmldata->item as $item) {
            echo '<li class="col4 item ' . $item->category . '">';
            echo '<img src="' . $item->thumb . '" alt="">';
            echo '<div class="col4 item-info">';
            echo '<h3 class="title"><a href="' . $item->image . '" data-rel="prettyPhoto['. $item->category .']">' . $item->titre . '</a></h3>';
            echo '</div>';
            echo '<div class="item-info-overlay">';
            echo '<div>';
            echo '<h4>' . $item->category . '</h4>';
            echo '<p>' . $item->description . '</p>';
            echo '<a href="' . $item->image . '" class="preview" data-rel="prettyPhoto['. $item->category .']">preview</a>';
            echo '</div>';
            echo '</div>';
            echo '</li>';
            }

    ?>

感谢您的帮助。

【问题讨论】:

  • 当同一层级中存在多个某种类型的元素时,SimpleXML 会将这些元素组成一个数组。只需将该数组的索引随机化 3 次(检查重复项)。

标签: php xml random


【解决方案1】:

我们开始吧:

$xml = simplexml_load_string($x); // assume XML in $x
$random = array_rand($xml->xpath("item"),3);
foreach ($random as $n) echo $xml->item[$n]->titre. "<br />";

看到它的工作:http://codepad.viper-7.com/WAL1EB

【讨论】:

    【解决方案2】:

    array_rand 很有用。

    试试这样的:

    $xmldata = simplexml_load_file('portfolio.xml');
    $random = array_rand($xmldata->xpath('item'), 3);
    foreach ($random as $key) {
        $item = $xmldata->item[$key];
        echo '<li class="col4 item ' . $item->category . '">';
        echo '<img src="' . $item->thumb . '" alt="">';
        echo '<div class="col4 item-info">';
        echo '<h3 class="title"><a href="' . $item->image . '" data-rel="prettyPhoto['. $item->category .']">' . $item->titre . '</a></h3>';
        echo '</div>';
        echo '<div class="item-info-overlay">';
        echo '<div>';
        echo '<h4>' . $item->category . '</h4>';
        echo '<p>' . $item->description . '</p>';
        echo '<a href="' . $item->image . '" class="preview" data-rel="prettyPhoto['. $item->category .']">preview</a>';
        echo '</div>';
        echo '</div>';
        echo '</li>';
    }
    

    未经测试

    确保您阅读了 array_rand 可以产生的警告并使用 count() 来确保您的 xml 中有足够的项目。

    【讨论】:

    • Rick,你调用array_rand 的方式将传递一个对象而不是数组。请参阅我使用 xpath 来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2011-06-04
    • 2022-12-31
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多