2017-10-02 1 views
1

Ich habe eine Reihe von Seitenzahlen:PHP - Duplikate mit foreach entfernen?

foreach($elements as $el) { 
$pageno = $el->getAttribute("pageno"); 

echo $pageno ; 
} 

Leider es Duplikate enthält. Ich habe den folgenden Code versucht, aber es wird nichts zurückgeben:

foreach(array_unique($elements) as $el) { 
$pageno = $el->getAttribute("pageno"); 

echo $pageno ; 
} 

Wie Sie die doppelten Seitennummern entfernen? Vielen Dank im Voraus :)

+0

Es funktioniert, wie ich erwarten würde, https://3v4l.org/iPoZk. Vielleicht ist $ elements kein Array? 'getAttribute' klingt wie ein domdocument object? – chris85

+1

Warum nicht ['array_unique()'] (http://php.net/manual/en/function.array-unique.php) verwenden? – GrumpyCrouton

+0

@GrumpyCrouton er tatsächlich Array_unique in der zweiten Foreach verwenden – MacBooc

Antwort

4

Da ich nicht Ihre Datenstruktur haben, ich sende eine generische Lösung. Dies kann optimiert werden, wenn wir die Struktur von $elements kennen, aber die folgende sollte für Sie arbeiten.

$pageNos = array(); 
foreach($elements as $el) { 
    $pageno = $el->getAttribute("pageno"); 
    if(!in_array($pageno, $pageNos)) 
    { 
     echo $pageno ; 
     array_push($pageNos,$pageno); 
    } 
} 

Grundsätzlich verwenden wir nur ein zusätzliches Array, um die gedruckten Werte zu speichern. Jedes Mal, wenn wir einen neuen Wert sehen, drucken wir ihn und fügen ihn dem Array hinzu.

+0

Vielen Dank! Das hat sehr gut funktioniert. Habe einen Syntaxfehler bekommen. Behoben durch Hinzufügen eines; nach 'array_push ($ pageNos, $ pageno)'. :) Gibt es auch eine Möglichkeit, dieses Array zu sortieren? Es ist Echo: 7 6 8 1 2 3 4 5 jetzt. Ich würde es gerne haben wie: 1 2 3 4 5 6 7 8. – Jack

+0

@Jack Sie könnten wahrscheinlich PHP 'sort()' nach der foreach tun und dann durch die Elemente danach erneut durchlaufen, um die Seitenzahlen anzuzeigen. – GrumpyCrouton

1

Sie können eine temporäre Liste von Seitenzahlen erstellen. Doppelte Instanzen wird dann aus der Liste der $ Elemente entfernt werden:

// Create a temporary list of page numbers 
$temp_pageno = array(); 
foreach($elements as $key => $el) { 
    $pageno = $el->getAttribute("pageno"); 
    if (in_array($pageno, $temp_pageno)) { 
     // Remove duplicate instance from the list 
     unset($elements[$key]); 
    } 
    else { 
     // Ad to temporary list 
     $temp_pageno[] = $pageno; 
    } 

    echo $pageno ; 
} 
1

Neben den Antworten bereits zur Verfügung gestellt, können Sie auch array_unique() verwenden können.

Ein sehr einfaches Beispiel:

$pageno = array_unique($pageno);