Mar*_*arc 39 php arrays array-push
我使用以下循环将项添加到我的一个名为$ liste的数组中.我想知道如果值已经在数组中,是否有可能以某种方式不向$ liste数组添加$ value?希望我很清楚.先感谢您.
$liste = array();
foreach($something as $value){
array_push($liste, $value);
}
Run Code Online (Sandbox Code Playgroud)
Roc*_*mat 81
你in_array在推之前检查它是否存在.
foreach($something as $value){
if(!in_array($value, $liste, true)){
array_push($liste, $value);
}
}
Run Code Online (Sandbox Code Playgroud)
在,true使"严格检查".这比较使用的元素===而不是==.
Nie*_*sol 20
真的有两种选择.
选项1:检查每个项目,如果项目在那里则不要推送.基本上你要求的是:
foreach($something as $value) {
if( !in_array($value,$liste)) array_push($liste,$value);
}
Run Code Online (Sandbox Code Playgroud)
选项2:无论如何添加它们并在以下情况下删除重复项:
foreach($something as $value) {
array_push($liste,$value);
}
$liste = array_unique($liste);
Run Code Online (Sandbox Code Playgroud)
从它的外观来看,你可能只是在寻找$liste = array_unique($something);.
也许您想将其用作关联数组。它被实现为(类似于) 哈希表,因此您可以获得恒定的插入时间而不是线性的。
function find_uniq( $something ) {
foreach($something as $value){
$liste[$value]++;
}
return array_keys( $liste );
}
Run Code Online (Sandbox Code Playgroud)
如果您想禁止显示警告,请@在第三行添加符号。
如果你想避免警告,你需要首先检查是否存在:
function find_uniq( $something ) {
foreach($something as $value){
if (isset($liste[$value]))
$liste[$value]++;
else
$liste[$value] = 1;
}
return array_keys( $liste );
}
Run Code Online (Sandbox Code Playgroud)
正确答案要简单得多。推送所有内容,然后使用array_unique()函数:
array_push($array, $new_member);
$array = array_unique($array);
Run Code Online (Sandbox Code Playgroud)
由于这个问题不是使用最佳实践代码开始的,我发现这里的所有答案都过于复杂。
解决有问题的代码:
基本上,自己试图做的是过滤掉重复。更好的方法:
$liste = array_unique($something);
Run Code Online (Sandbox Code Playgroud)
如果向非空数组添加元素:
$liste = array_unique(array_merge($liste, $something));
Run Code Online (Sandbox Code Playgroud)
如果您使用 array_push():
除非您实际使用数组推送的返回值,否则您应该真正使用:
$liste[] = $value;
Run Code Online (Sandbox Code Playgroud)
更短的语法和轻微的性能提升