2012-02-14 23 views
1

的顺序我有一些标记,像这样:使用PHP来改变元素

<div class="list"> 

    <article> content... </article> 
    <article> content... </article> 
    <article> content... </article> 
    <article> content... </article> 
    <article> content... </article> 

</div> 

我想要做的是使这些文章将出现在页面随机什么顺序。什么是最好和最简单的方法来做到这一点?

我想过要做一些长度计数并将其存储在一个数组中,然后以随机顺序将它们再次吐出。例如

$numbers = range(1, 20); 
shuffle($numbers); 
foreach ($numbers as $number) { 
    echo "$number "; 
} 

任何人都可以提供想法等?谢谢

注意:这些不是来自数据库!

+0

什么是您的数据源呢?它们是否已经在数组中,还是需要解析HTML源代码? – Treffynnon 2012-02-14 11:51:15

+0

这只是HTML上的页面,你看到上面。 – Cameron 2012-02-14 11:51:37

+1

我会先看看DOMDocument来解析HTML – Treffynnon 2012-02-14 11:53:02

回答

3

Every day I'm shuffling!

但是,是的,有一个PHP数组的内容,然后显示它们都通过一个小foreach就可以了。例如:

$content = array('content1', 'content2', 'content3'); 
shuffle($content); 
echo '<div>'; 
foreach($content as $value) { 
    echo '<article>', $value, '</article>'; 
} 
echo '</div>'; 
1

假设你的元素存储在一个阵列可以使用shuffle()功能:

$a = array('a', 'b', 'c'); 
shuffle($a); 

这就导致了一个随机排序的$a

+0

但是你不能认为,因为他说他就是这么想的。他正在寻求更好的解决方案... – 2012-02-14 11:55:12

+0

他稍后添加了该代码段。原帖未包含该部分。 – 2012-02-14 12:08:21

1

当东西略高于从数据库中呼应了HTML的大块更复杂处理,你想看看DOMDocument class。它会以任何你喜欢的方式帮助你操纵HTML(a.k.a.DOM)。

1

您可以使用DOMDocument。

$dom = new DOMDocument; 

$dom->loadXML($html); 

$articles = $dom->getElementsByTagName('article'); 

$articlesShuffled = array(); 

// What is a good way in PHP to turn an array-like object into a real array?  
foreach($articles as $article) { 
      $articlesShuffled[] = $article; 
} 

shuffle($articlesShuffled); 

foreach($articlesShuffled as $article) { 
     $article->parentNode->appendChild($article); 
} 

echo $dom->saveHTML(); 

CodePad

我将输入视为XML,因为loadHTML()方法抱怨article元素。我想你需要提供一个HTML5文档类型(或者告诉DOMDocument模式)才能工作。