在删除数组中的空值时,我似乎遇到了障碍。
我有以下数组:
key:0 value:
key:1 value:type
key:3 value:gear
key:4 value:
key:5 value:rarity
如您所见,键0
和键4
都是空的(或填充空格)。
我尝试过以下操作,但它似乎没有效果:
foreach($array as $key=>$value){
if ($value == ' ' || $value=='' || $value==' ' || empty($value)) { unset($array[$key]); }
echo 'key:'.$key.' value:'.$value.'</br></br>';
}
甚至在2个foreach循环中尝试过它只是为了确定,但仍然没有。
答案 0 :(得分:1)
有两个问题:首先,即使您取消设置数组键,也不会调用continue
,这意味着您仍然会打印该值。其次 - 您可以轻松使用trim
删除任何会影响比较的空白。
foreach ($array as $key => $value) {
if (empty($value) || !trim($value)) {
unset($array[$key]);
continue;
}
echo 'key:' . $key . ' value:' . $value . '</br></br>';
}
答案 1 :(得分:0)
让我们不要急于#34;只是这样做&#34;回答。这是你尝试过的:
代码:(Demo)
$array=[0=>'',1=>'type',3=>'gear',4=>' ',5=>'rarity'];
foreach($array as $key=>$value){
if ($value == ' ' || $value=='' || $value==' ' || empty($value)) { unset($array[$key]); }
echo 'key:'.$key.' value:'.$value."\n";
}
foreach($array as $key=>$value){
if ($value == ' ' || $value=='' || $value==' ' || empty($value)) { unset($array[$key]); }
echo 'key:'.$key.' value:'.$value."\n";
}
它正在做你要求它做的事情。第一个循环取消不需要的元素并打印键和键。分配给&#34;副本的值#34;是$array
&#34;写的foreach()
&#34; &安培;迭代。第二个循环写入&amp;迭代一个新的&#34;副本&#34; $array
(先前已被第一个循环修改),您可以看到 empty-ish 元素现已消失。
输出:
key:0 value: # unset $array[$key] and display $value (these are different entities
key:1 value:type
key:3 value:gear
key:4 value:
key:5 value:rarity
key:1 value:type # you see elements [0] and [4] are removed as intended
key:3 value:gear
key:5 value:rarity
现在,对于&#34;做这个&#34; part ...你有几个选择。以下是一些:
代码:(Demo)
$array=[0=>'',1=>'type',3=>'gear',4=>' ',5=>'rarity'];
var_export(array_filter($array,function($v){return strlen(trim($v));})); // professional grade: uses the function specifically designed to perform this function and the process will be instantly understood by future devs that read your code
var_export(preg_grep('/\S/',$array)); // A regular expression filter. Regex solutions should only be used when other methods will not suffice. For this reason, this method is ill-advised
var_export(preg_grep('/^\s*$/',$array,PREG_GREP_INVERT)); // A regular expression filter (inverted pattern filteration). Regex solutions should only be used when other methods will not suffice. For this reason, this method is ill-advised
foreach($array as $k=>$v){ // possibly the fastest method, I didn't test, but it is also the most verbose and less descriptive as a technique
if(!strlen(trim($v))){unset($array[$k]);}
}
var_export($array);
输出:
array (
1 => 'type',
3 => 'gear',
5 => 'rarity',
)array (
1 => 'type',
3 => 'gear',
5 => 'rarity',
)array (
1 => 'type',
3 => 'gear',
5 => 'rarity',
)array (
1 => 'type',
3 => 'gear',
5 => 'rarity',
)
现在是the manual给你的最重要的建议:
如果var存在并且具有非空的非零值,则返回FALSE。 否则返回TRUE。
以下内容被认为是空的:
- &#34;&#34; (空字符串)
- 0(0为整数)
- 0.0(0作为浮动)
- &#34; 0&#34; (0作为字符串)
- NULL
- FALSE
- 阵列()
- (空数组)
- $变种; (声明的变量,但没有值)
这&#34;贪心&#34;默认行为由empty()
和array_filter()
使用,如果您不知道,可能会给您的任务带来麻烦。这就是为什么在我建议的方法中,我编写了一个自定义过滤条件,在foreach循环中,我用empty()
调用替换strlen()
。