52

次のループを使用して、$listeという名前の配列にアイテムを追加しています。値がすでに配列にある場合、$ liste配列に$valueを追加しないことがどういうわけか可能かどうか知りたいですか?私がはっきりしていることを願っています。前もって感謝します。

$liste = array();
foreach($something as $value){
     array_push($liste, $value);
}
4

9 に答える 9

110

in_arrayプッシュする前に、を使用して、そこにあるかどうかを確認します。

foreach($something as $value){
    if(!in_array($value, $liste, true)){
        array_push($liste, $value);
    }
}

,true「厳密なチェック」を可能にします。===これは、代わりに を使用して要素を比較します==

于 2012-04-10T20:32:39.820 に答える
27

本当に2つのオプション。

オプション 1: 各項目を確認し、項目がある場合はプッシュしないでください。基本的にあなたが求めているもの:

foreach($something as $value) {
    if( !in_array($value,$liste)) array_push($liste,$value);
}

オプション 2: とにかくそれらを追加し、後で重複を取り除きます:

foreach($something as $value) {
    array_push($liste,$value);
}
$liste = array_unique($liste);

しかし、それを見ると、あなたはただ探しているだけかもしれません$liste = array_unique($something);.

于 2012-04-10T20:33:39.360 に答える
8

この質問は、最初からベストプラクティスのコードを使用していないため、ここでのすべての回答は複雑すぎることがわかりました。

問題のコードを解決する:

基本的に、問題自体でやろうとしていることは、繰り返しを除外することです。より良いアプローチ:

$liste = array_unique($something);

空でない配列に要素を追加する場合:

$liste = array_unique(array_merge($liste, $something));

array_push() を使用している場合:

実際に配列プッシュの戻り値を使用していない限り、実際に使用する必要があります:

$liste[] = $value;

より短い構文とわずかなパフォーマンスの向上

于 2018-07-13T07:58:22.407 に答える
4

代わりに連想配列として使用したいかもしれません。(何かのような) ハッシュテーブルとして実装されているため、線形ではなく一定の挿入時間が得られます。

function find_uniq( $something ) {
    foreach($something as $value){
         $liste[$value]++;
    }
    return array_keys( $liste );
}
于 2012-04-10T20:33:30.470 に答える
3

を呼び出す前に、この条件を簡単に確認できますarray_push()。値が存在するかどうかを確認するにはarray_search()、強力な比較を使用して使用します。false

foreach( $something as $value ){
    if( array_search( $value, $liste, true ) === false ){
        array_push( $liste, $value );
    }
}

(ちなみに、「厳密なチェック」を使用するために追加,trueします。これは、の代わりに比較に使用されます)array_search=====

于 2012-04-10T20:35:27.533 に答える
1

ロジックを省略してロジックを節約し、速度を向上させます。上書きし続けるだけです。

$list = array();
foreach ($something as $value) {
  if (!is_object($value) && !is_array($value)) {
    $list[$value] = $value
  }
}
$list = array_values($list);
于 2015-02-06T04:37:41.410 に答える
1

素晴らしい答えはすでに上にありますが、コード全体に複数の array_push() がある場合、毎回 if(in_array()) ステートメントを書くのは面倒です。

その場合のコードを短縮するソリューションは次のとおりです。別の関数を使用します。

function arr_inserter($arr,$add){ //to prevent duplicate when inserting
    if(!in_array($add,$arr))
        array_push($arr,$add);
    return $arr;
}

次に、すべての array_push() ニーズで、次のように上記の関数を呼び出すことができます:

$liste = array();
foreach($something as $value){
    $liste = arr_inserter($liste, $value);
}

$value が既に存在する場合、$liste は変更されません。

$value がまだ存在しない場合は、$liste に追加されます。

それが役立つことを願っています。

于 2014-07-02T08:09:33.367 に答える