2 Stimmen

Verwenden Sie PHP, um die Reihenfolge der Elemente zu ändern

Ich habe einige Markierungen wie diese:

<div class="list">

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

</div>

Ich möchte die Reihenfolge, in der diese Artikel auf der Seite erscheinen, zufällig festlegen. Was wäre der beste und einfachste Weg, dies zu tun?

Ich dachte daran, eine Art von Länge zählen und speichern sie in einem Array und dann spucken sie wieder in einer zufälligen Reihenfolge. z.B..

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

Kann jemand Ideen etc. anbieten? Danke

HINWEIS: Diese Daten stammen nicht aus einer Datenbank!

4voto

Florian Margaine Punkte 54172

Jeden Tag schlurfe ich!

Aber ja, mit Ihrem Inhalt in einem PHP-Array, dann zeigen sie alle durch eine kleine foreach wäre in Ordnung. Beispiel:

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

1voto

Gunnar Wrobel Punkte 181

Unter der Annahme, dass Ihre Elemente in einem Array gespeichert sind, können Sie die shuffle() Funktion:

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

Dies führt zu einer zufälligen Art von $a .

1voto

Madara's Ghost Punkte 165354

Wenn es um etwas Komplizierteres geht als das Auslesen von HTML-Stücken aus einer Datenbank, sollten Sie sich die DOMDocument Klasse . Es unterstützt Sie bei der Manipulation des HTML (auch bekannt als DOM) in jeder gewünschten Weise.

1voto

alex Punkte 457905

Sie könnten DOMDocument verwenden.

$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 .

Ich habe die Eingabe als XML behandelt, weil die loadHTML() Methode beschwert sich über die article Element. Ich schätze, Sie müssten einen HTML5-Doctype angeben (oder DOMDocument das Schema mitteilen), damit das funktioniert.

0voto

Micromega Punkte 12386

Ich würde die DOM-Klasse verwenden: http://php.net/manual/en/book.dom.php und ein DFS, um die erste Ebene des Baums zu mischen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X