我正在使用以下循环将项目添加到我的一个名为 $liste 的数组中。我想知道如果值已经在数组中,是否有可能不将 $value 添加到 $liste 数组中?希望我清楚。先感谢您。
$liste = array();
foreach($something as $value){
array_push($liste, $value);
}
我正在使用以下循环将项目添加到我的一个名为 $liste 的数组中。我想知道如果值已经在数组中,是否有可能不将 $value 添加到 $liste 数组中?希望我清楚。先感谢您。
$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
启用“严格检查” 。===
这使用而不是比较元素==
。
真的有两个选择。
选项 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_unique()
功能:
array_push($array, $new_member);
$array = array_unique($array);
您可以在调用之前简单地检查此条件array_push()
。使用array_search()
并使用强比较来false
查看值是否存在:
foreach( $something as $value ){
if( array_search( $value, $liste, true ) === false ){
array_push( $liste, $value );
}
}
(顺便说一句:添加,true
到array_search
使用“严格检查”。这将===
用于比较而不是==
)
上面已经给出了很好的答案,但是如果您的代码中有多个 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。
希望有帮助。
通过保持逻辑少来节省逻辑并提高速度。只是继续覆盖。
$list = array();
foreach ($something as $value) {
if (!is_object($value) && !is_array($value)) {
$list[$value] = $value
}
}
$list = array_values($list);
我有另一个解决方案给你!您可以将键用作值并且键永远不会重复。
$arr = ["A" => true, "B" => true, "C" => true];
$item = "A";
$arr[$item] = true;
用法:
foreach($arr as $value => $helper){
echo $value;
}
好,我给你写一堂课!不允许重复项的数组称为集合。
class Set{
private $countainer;
public function get(){
return $this->container;
}
public function push($item){
$this->container[$item] = true;
}
public function delete($item){
unset($this->container[$item]);
}
}
注意:这不适用于关联数组和值。