Bol*_*ock 1477
当您处理一系列字符串时,您可以简单地使用array_filter(),方便地为您处理所有这些:
print_r(array_filter($linksArray));
Run Code Online (Sandbox Code Playgroud)
请记住,如果没有提供回调,则将删除所有等于FALSE(参见转换为布尔值)的数组条目.因此,如果您需要保留精确字符串的元素,则'0'需要自定义回调:
// PHP < 5.3
print_r(array_filter($linksArray, create_function('$value', 'return $value !== "";')));
// PHP 5.3 and later
print_r(array_filter($linksArray, function($value) { return !is_null($value) && $value !== ''; }));
Run Code Online (Sandbox Code Playgroud)
And*_*ore 162
您可以使用array_filter删除空元素:
$emptyRemoved = array_filter($linksArray);
Run Code Online (Sandbox Code Playgroud)
如果您有(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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:也许你的元素本身不是空的,但包含一个或多个空格......你可以在使用之前使用以下内容array_filter
$trimmedArray = array_map('trim', $linksArray);
Run Code Online (Sandbox Code Playgroud)
小智 112
关于这个主题的最流行的答案绝对是不正确的.
考虑以下PHP脚本:
<?php
$arr = array('1', '', '2', '3', '0');
// Incorrect:
print_r(array_filter($arr));
// Correct:
print_r(array_filter($arr, 'strlen'));
Run Code Online (Sandbox Code Playgroud)
为什么是这样?因为包含单个"0"字符的字符串也会计算为布尔值false,所以即使它不是空字符串,它仍然会被过滤掉.那将是一个错误.
将内置strlen函数作为过滤函数传递将起作用,因为它为非空字符串返回非零整数,为空字符串返回零整数.转换为布尔值时,非零整数始终求值为true,而转换为布尔值时,零整数始终求值为false.
所以,绝对的,明确的,正确的答案是:
$arr = array_filter($arr, 'strlen');
Run Code Online (Sandbox Code Playgroud)
tam*_*asd 98
$linksArray = array_filter($linksArray);
Run Code Online (Sandbox Code Playgroud)
"如果没有提供回调,则将删除所有输入等于FALSE的条目." - http://php.net/manual/en/function.array-filter.php
mat*_*jan 51
$myarray = array_filter($myarray, 'strlen'); //removes null values but leaves "0"
$myarray = array_filter($myarray); //removes all null values
Run Code Online (Sandbox Code Playgroud)
hel*_*pse 41
你可以这样做
array_filter($array)
Run Code Online (Sandbox Code Playgroud)
array_filter:"如果没有提供回调,则将删除所有输入等于FALSE的条目." 这意味着具有值NULL,0,'0','',FALSE,array()的元素也将被删除.
另一种选择是做
array_diff($array, array(''))
Run Code Online (Sandbox Code Playgroud)
这将删除值为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())
Run Code Online (Sandbox Code Playgroud)
总结一下:
Mar*_*ker 35
foreach($linksArray as $key => $link)
{
if($link === '')
{
unset($linksArray[$key]);
}
}
print_r($linksArray);
Run Code Online (Sandbox Code Playgroud)
mar*_*out 30
另一个用于从数组中删除空(""空字符串)元素的衬垫.
$array = array_filter($array, function($a) {return $a !== "";});
Run Code Online (Sandbox Code Playgroud)
注意:此代码故意保留null,0和false元素.
或者您可能希望首先修剪数组元素:
$array = array_filter($array, function($a) {
return trim($a) !== "";
});
Run Code Online (Sandbox Code Playgroud)
注意:此代码还会删除null和false元素.
Nab*_*.Z. 18
这是我建议的代码:
$myarray = array_values(array_filter(array_map('trim', $myarray), 'strlen'));
Run Code Online (Sandbox Code Playgroud)
我认为使用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);
Run Code Online (Sandbox Code Playgroud)
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"
}
Run Code Online (Sandbox Code Playgroud)
mul*_*uin 11
如果您正在使用数值数组并且需要在删除空元素后重新索引数组,请使用array_values函数:
array_values(array_filter($array));
Run Code Online (Sandbox Code Playgroud)
Cra*_*nio 11
投票最多的答案是错误的,或者至少不完全正确,因为OP只讨论空白字符串.这是一个彻底的解释:
首先,我们必须就空手段达成一致.你的意思是过滤掉:
$element === false)empty()功能?仅过滤掉空字符串:
$filtered = array_diff($originalArray, array(""));
Run Code Online (Sandbox Code Playgroud)
要仅过滤掉严格的错误值,您必须使用回调函数:
$filtered = array_diff($originalArray, 'myCallback');
function myCallback($var) {
return $var === false;
}
Run Code Online (Sandbox Code Playgroud)
回调对于您想要过滤掉"falsey"值的任何组合也很有用,除了一些.(例如,过滤器的每个null和false等,只留下0):
$filtered = array_filter($originalArray, 'myCallback');
function myCallback($var) {
return ($var === 0 || $var === '0');
}
Run Code Online (Sandbox Code Playgroud)
第三和第四种情况(最终为了我们的目的)是等价的,为此您必须使用的是默认值:
$filtered = array_filter($originalArray);
Run Code Online (Sandbox Code Playgroud)
我必须这样做才能保持(字符串)0的数组值
$url = array_filter($data, function ($value) {
return (!empty($value) || $value === 0 || $value==='0');
});
Run Code Online (Sandbox Code Playgroud)
$a = array(1, '', '', '', 2, '', 3, 4);
$b = array_values(array_filter($a));
print_r($b)
Run Code Online (Sandbox Code Playgroud)
小智 8
function trim_array($Array)
{
foreach ($Array as $value) {
if(trim($value) === '') {
$index = array_search($value, $Array);
unset($Array[$index]);
}
}
return $Array;
}
Run Code Online (Sandbox Code Playgroud)
小智 8
$out_array = array_filter($input_array, function($item)
{
return !empty($item['key_of_array_to_check_whether_it_is_empty']);
}
);
Run Code Online (Sandbox Code Playgroud)
For multidimensional array
$data = array_map('array_filter', $data);
$data = array_filter($data);
Run Code Online (Sandbox Code Playgroud)
小智 7
我使用以下脚本从数组中删除空元素
for ($i=0; $i<$count($Array); $i++)
{
if (empty($Array[$i])) unset($Array[$i]);
}
Run Code Online (Sandbox Code Playgroud)
只有一行:更新(感谢@suther):
$array_without_empty_values = array_filter($array);
Run Code Online (Sandbox Code Playgroud)
小智 6
只是想为循环做出贡献......也解决密钥中的空白问题......
在我的情况下,我希望在操作完成时保留顺序数组键(不仅仅是奇数,这就是我正在盯着的.设置代码以查找奇数键对我来说似乎很脆弱而且对未来不友好.)
我正在寻找更像这样的东西:http://gotofritz.net/blog/howto/removing-empty-array-elements-php/
array_filter和array_slice的组合起到了作用.
$example = array_filter($example);
$example = array_slice($example,0);
不知道效率或基准,但它的工作原理.
小智 5
foreach($arr as $key => $val){
if (empty($val)) unset($arr[$key];
}
Run Code Online (Sandbox Code Playgroud)
小智 5
$my = ("0"=>" ","1"=>"5","2"=>"6","3"=>" ");
foreach ($my as $key => $value) {
if (is_null($value)) unset($my[$key]);
}
foreach ($my as $key => $value) {
echo $key . ':' . $value . '<br>';
}
Run Code Online (Sandbox Code Playgroud)
输出
1:5
2:6
| 归档时间: |
|
| 查看次数: |
852678 次 |
| 最近记录: |