次のループを使用して、$listeという名前の配列にアイテムを追加しています。値がすでに配列にある場合、$ liste配列に$valueを追加しないことがどういうわけか可能かどうか知りたいですか?私がはっきりしていることを願っています。前もって感謝します。
$liste = array();
foreach($something as $value){
array_push($liste, $value);
}
次のループを使用して、$listeという名前の配列にアイテムを追加しています。値がすでに配列にある場合、$ liste配列に$valueを追加しないことがどういうわけか可能かどうか知りたいですか?私がはっきりしていることを願っています。前もって感謝します。
$liste = array();
foreach($something as $value){
array_push($liste, $value);
}
in_array
プッシュする前に、を使用して、そこにあるかどうかを確認します。
foreach($something as $value){
if(!in_array($value, $liste, true)){
array_push($liste, $value);
}
}
は,true
「厳密なチェック」を可能にします。===
これは、代わりに を使用して要素を比較します==
。
本当に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);
.
この質問は、最初からベストプラクティスのコードを使用していないため、ここでのすべての回答は複雑すぎることがわかりました。
問題のコードを解決する:
基本的に、問題自体でやろうとしていることは、繰り返しを除外することです。より良いアプローチ:
$liste = array_unique($something);
空でない配列に要素を追加する場合:
$liste = array_unique(array_merge($liste, $something));
array_push() を使用している場合:
実際に配列プッシュの戻り値を使用していない限り、実際に使用する必要があります:
$liste[] = $value;
より短い構文とわずかなパフォーマンスの向上
代わりに連想配列として使用したいかもしれません。(何かのような) ハッシュテーブルとして実装されているため、線形ではなく一定の挿入時間が得られます。
function find_uniq( $something ) {
foreach($something as $value){
$liste[$value]++;
}
return array_keys( $liste );
}
を呼び出す前に、この条件を簡単に確認できますarray_push()
。値が存在するかどうかを確認するにはarray_search()
、強力な比較を使用して使用します。false
foreach( $something as $value ){
if( array_search( $value, $liste, true ) === false ){
array_push( $liste, $value );
}
}
(ちなみに、「厳密なチェック」を使用するために追加,true
します。これは、の代わりに比較に使用されます)array_search
===
==
ロジックを省略してロジックを節約し、速度を向上させます。上書きし続けるだけです。
$list = array();
foreach ($something as $value) {
if (!is_object($value) && !is_array($value)) {
$list[$value] = $value
}
}
$list = array_values($list);
素晴らしい答えはすでに上にありますが、コード全体に複数の 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 に追加されます。
それが役立つことを願っています。