我的数组中有一些来自用户的空字符串元素。在执行以下操作后,$linksArray
仍然具有空元素:
foreach($linksArray as $link)
{
if($link == '')
{
unset($link);
}
}
print_r($linksArray);
empty()
函数也不起作用。
我的数组中有一些来自用户的空字符串元素。在执行以下操作后,$linksArray
仍然具有空元素:
foreach($linksArray as $link)
{
if($link == '')
{
unset($link);
}
}
print_r($linksArray);
empty()
函数也不起作用。
array_filter()
函数,它会方便地为你处理所有这些:$linksArray = array_filter($linksArray);
// PHP 7.4 and later
print_r(array_filter($linksArray, fn($value) => !is_null($value) && $value !== ''));
// PHP 5.3 and later
print_r(array_filter($linksArray, function($value) { return !is_null($value) && $value !== ''; }));
// PHP < 5.3
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));
$linksArray = array_values(array_filter($linksArray));
array_filter
应该移除空元素。如果PHP的“空”定义与您的定义不完全相同,则可以使用匿名函数作为回调选项来删除不需要的元素。显然,您必须具备 PHP 5.3 或更高版本才能使用匿名回调函数。https://dev59.com/iHE95IYBdhLWcg3wMrEB - Buttle Butkusa
只是重置了第一个。 - Cullubarray_filter
来移除空元素:$emptyRemoved = array_filter($linksArray);
如果你的数组中有(int) 0
,你可以使用以下方法:$emptyRemoved = remove_empty($linksArray);
function remove_empty($array) {
return array_filter($array, '_remove_empty_internal');
}
function _remove_empty_internal($value) {
return !empty($value) || $value === 0;
}
编辑:也许你的元素本身不是空的,而是包含一个或多个空格... 在使用array_filter
之前,您可以使用以下方法:
$trimmedArray = array_map('trim', $linksArray);
scalar
元素,是的。否则,你无法这样做。 - Andrew Moorefunction remove_empty($array) {
return array_filter($array, function($value){return !empty($value) || $value === 0;});
}
- viralarray_map()
做了魔法,因为我在那些空数组中有空格! - Prodigy<?php
$arr = array('1', '', '2', '3', '0');
// Incorrect:
print_r(array_filter($arr));
// Correct:
print_r(array_filter($arr, 'strlen'));
这是为什么呢?因为包含单个'0'字符的字符串也会被计算为布尔假,所以即使它不是空字符串,它也会被过滤掉。那将是一个错误。
将内置的strlen函数作为过滤函数传递将起作用,因为对于非空字符串它返回一个非零整数,而对于空字符串它返回零整数。非零整数在转换为布尔值时始终计算为true,而零整数在转换为布尔值时始终计算为false。
因此,绝对、明确、正确的答案是:
$arr = array_filter($arr, 'strlen');
0
、""
、null
) - rinogostrlen() 期望参数1是字符串,但提供的是数组
。 - hpaknia$linksArray = array_filter($linksArray);
如果没有提供回调函数,所有与FALSE相等的输入条目都将被移除。-- http://php.net/manual/en/function.array-filter.php $myarray = array_filter($myarray, 'strlen'); //removes null values but leaves "0"
$myarray = array_filter($myarray); //removes all null values
strlen
不再是一种好的技术,因为它会生成过时警告。Deprecated: strlen(): Passing null to parameter #1 ($string) of type string is deprecated
。 - mickmackusaarray_filter($array)
array_filter: “如果没有提供回调函数,则会删除输入的所有等于FALSE的条目。”这意味着具有值NULL、0、'0'、''、FALSE、array() 的元素也将被删除。
另一个选项是执行
array_diff($array, array(''))
这将会移除值为 NULL、'' 和 FALSE 的元素。
希望这可以帮到你 :)
这里有一个例子。
$a = array(0, '0', NULL, FALSE, '', array());
var_dump(array_filter($a));
// array()
var_dump(array_diff($a, array(0))) // 0 / '0'
// array(NULL, FALSE, '', array());
var_dump(array_diff($a, array(NULL))) // NULL / FALSE / ''
// array(0, '0', array())
总结:
foreach($linksArray as $key => $link)
{
if($link === '')
{
unset($linksArray[$key]);
}
}
print_r($linksArray);
false
和 0
。考虑到这篇文章是在被接受的答案发表的同一分钟发布的(那个答案不安全且不正确),我只能假设你获得的8个赞相对于那个被接受的答案的649个赞较少,是因为后者是一个单行的解决方案。 - rybo111array_filter()
的逻辑比使用foreach()
循环更加清晰。 - Mark Bakertrim()
的人,我建议使用if(is_string($link)&& trim($link)==='')
。 - rybo111这是我建议的代码:
$myarray = array_values(array_filter(array_map('trim', $myarray), 'strlen'));
我认为使用array_filter
是不错的选择,但这还不足够,因为像space
和\n
这样的值会保留在数组中,这通常是不好的。
因此,我建议您同时使用array_filter
和array_map
。
array_map
用于去除空格,array_filter
用于去除空值,strlen
用于保留值为0
的项,并且如果需要,array_values
可用于重新索引。
$myarray = array("\r", "\n", "\r\n", "", " ", "0", "a");
// "\r", "\n", "\r\n", " ", "a"
$new1 = array_filter($myarray);
// "a"
$new2 = array_filter(array_map('trim', $myarray));
// "0", "a"
$new3 = array_filter(array_map('trim', $myarray), 'strlen');
// "0", "a" (reindex)
$new4 = array_values(array_filter(array_map('trim', $myarray), 'strlen'));
var_dump($new1, $new2, $new3, $new4);
array(5) {
[0]=>
" string(1) "
[1]=>
string(1) "
"
[2]=>
string(2) "
"
[4]=>
string(1) " "
[6]=>
string(1) "a"
}
array(1) {
[6]=>
string(1) "a"
}
array(2) {
[5]=>
string(1) "0"
[6]=>
string(1) "a"
}
array(2) {
[0]=>
string(1) "0"
[1]=>
string(1) "a"
}
http://sandbox.onlinephpfunctions.com/code/e02f5d8795938be9f0fa6f4c17245a9bf8777404
另一种从您的数组中删除空元素(""空字符串)的一行代码。
$array = array_filter($array, function($a) {return $a !== "";});
注意:此代码有意保留了null
、0
和false
元素。
或者您可能想先修剪您的数组元素:
$array = array_filter($array, function($a) {
return trim($a) !== "";
});
注意:此代码还会删除null
和false
元素。