2017-10-02 11 views
1

私はページ番号の配列を持っている:PHP - foreachで重複を削除しますか?

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

echo $pageno ; 
} 

は、悲しいことに、それは重複が含まれています。私は次のコードを試しましたが、それは物を返さないでしょう:

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

echo $pageno ; 
} 

重複するページ番号を削除するにはどうすればいいですか?事前に感謝:)

+0

非常に簡単な例。おそらく '$ elements'は配列ではありませんか? 'getAttribute'はdomdocumentオブジェクトのように聞こえるでしょうか? – chris85

+1

['array_unique()'](http://php.net/manual/en/function.array-unique.php)を使わないのはなぜですか? – GrumpyCrouton

+0

@GrumpyCrouton彼は実際には2番目のforeachでarray_uniqueを使用します – MacBooc

答えて

4

私はあなたのデータ構造を持っていないので、私は一般的なソリューションを提供しています。 $elementsの構造を知っていれば、これは最適化できますが、下の方が効果的です。

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

基本的には、印刷された値を格納するために追加の配列を使用しています。新しい値が見えるたびに、それを印刷して配列に追加します。

+0

ありがとう!これは非常にうまくいった。しかし、構文エラーが発生しました。 aを追加すると修正されました。 'array_push($ pageNos、$ pageno)'の後に。 :)この配列をソートする方法もありますか?それはエコーです:7 6 8 1 2 3 4 5私はそれが好きです:1 2 3 4 5 6 7 8. – Jack

+0

@JackおそらくPHPの 'sort()'をforeachの後に実行し、その後、要素を繰り返しループしてページ番号を表示することができます。 – GrumpyCrouton

1

ページ番号の一時的なリストを作成できます。重複の場合は、$の要素のリストから削除されます。

// 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

別に、既に提供の回答から、あなたもarray_unique()を使用することができます。私は、https://3v4l.org/iPoZkを期待どおりに動作

$pageno = array_unique($pageno);