php - 删除空数组元素

我的数组中的一些元素是基于用户提交的内容的空字符串。 我需要删除这些元素。 我有这个:

foreach($linksArray as $link)

{

if($link == '')

{

unset($link);

}

}

print_r($linksArray);

但它不起作用,$linksArray仍然有空元素。 我也尝试过使用empty()功能,但结果是一样的。

Will asked 2019-01-15T21:45:10Z

25个解决方案

1290 votes

当您处理一系列字符串时,您只需使用FALSE,它可以方便地为您处理所有这些:

print_r(array_filter($linksArray));

请记住,如果没有提供回调,则将删除所有等于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 $value !== ''; }));

BoltClock answered 2019-01-15T21:45:25Z

148 votes

您可以使用array_filter删除空元素:

$emptyRemoved = array_filter($linksArray);

如果阵列中有array_filter,则可以使用以下命令:

$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);

Andrew Moore answered 2019-01-15T21:46:00Z

89 votes

$linksArray = array_filter($linksArray);

“如果没有提供回调,则将删除所有输入等于FALSE的条目。” - [http://php.net/manual/en/function.array-filter.php]

tamasd answered 2019-01-15T21:46:22Z

80 votes

关于这个主题的最流行的答案绝对是不正确的。

考虑以下PHP脚本:

$arr = array('1', '', '2', '3', '0');

// Incorrect:

print_r(array_filter($arr));

// Correct:

print_r(array_filter($arr, 'strlen'));

为什么是这样? 因为包含单个“0”字符的字符串也计算为布尔值false,所以即使它不是空字符串,它仍然会被过滤。 那将是一个错误。

将内置strlen函数作为过滤函数传递将起作用,因为它为非空字符串返回非零整数,为空字符串返回零整数。 转换为布尔值时,非零整数始终求值为true,而转换为布尔值时,零整数始终求值为false。

所以,绝对的,明确的,正确的答案是:

$arr = array_filter($arr, 'strlen');

Ron Cemer answered 2019-01-15T21:47:13Z

50 votes

$myarray = array_filter($myarray, 'strlen'); //removes null values but leaves "0"

$myarray = array_filter($myarray); //removes all null values

matija kancijan answered 2019-01-15T21:47:28Z

38 votes

你可以这样做

array_filter($array)

array_filter:“如果没有提供回调,则将删除所有输入等于FALSE的条目。” 这意味着具有值NULL,0,'0','',FALSE,array()的元素也将被删除。

另一种选择是做

array_diff($array, array(''))

这将删除值为NULL,''和FALSE的元素。

希望这可以帮助 :)

UPDATE

这是一个例子。

$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())

总结一下:

0或'0'将删除0和'0'

NULL,FALSE或''将删除NULL,FALSE和''

helpse answered 2019-01-15T21:48:33Z

28 votes

foreach($linksArray as $key => $link)

{

if($link === '')

{

unset($linksArray[$key]);

}

}

print_r($linksArray);

Mark Baker answered 2019-01-15T21:48:49Z

22 votes

另一个用于从数组中删除空(“”空字符串)元素的衬垫。

$array = array_filter($array, create_function('$a','return $a!=="";'));

注意:此代码故意保留null,0和false元素。

或者您可能希望首先修剪数组元素:

$array = array_filter($array, create_function('$a','return trim($a)!=="";'));

注意:此代码还会删除null和false元素。

marcovtwout answered 2019-01-15T21:49:30Z

10 votes

如果您正在使用数值数组并且需要在删除空元素后重新索引数组,请使用array_values函数:

array_values(array_filter($array));

另见:PHP reindex数组?

mulquin answered 2019-01-15T21:49:59Z

10 votes

简而言之:

这是我建议的代码:

$myarray = array_values(array_filter(array_map('trim', $myarray), 'strlen'));

说明:

我认为使用array_map是好的,但还不够,因为值类似于array_filter和strlen,...保留在数组中,这通常很糟糕。

所以我建议你使用混合物array_map和array_filter。

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://phpio.net/s/5yg0]

Nabi K.A.Z. answered 2019-01-15T21:51:07Z

9 votes

投票最多的答案是错误的,或者至少不完全正确,因为OP只讨论空白字符串。 这是一个彻底的解释:

什么是空的意思?

首先,我们必须就空手段达成一致。 你的意思是过滤掉:

只有空字符串(“”)?

严格错误的价值观?(null)

虚假的价值观? (即0,0.0,“”,“0”,NULL,array()...)

相当于PHP的null功能?

你如何过滤掉这些价值观

仅过滤掉空字符串:

$filtered = array_diff($originalArray, array(""));

要仅过滤掉严格的错误值,您必须使用回调函数:

$filtered = array_diff($originalArray, 'myCallback');

function myCallback($var) {

return $var === false;

}

回调对于您想要过滤掉“falsey”值的任何组合也很有用,除了一些。 (例如,过滤每null和false等,只留下0):

$filtered = array_filter($originalArray, 'myCallback');

function myCallback($var) {

return ($var === 0 || $var === '0');

}

第三和第四种情况(最终我们的目的)是等价的,为此您必须使用的是默认值:

$filtered = array_filter($originalArray);

Cranio answered 2019-01-15T21:52:40Z

8 votes

$a = array(1, '', '', '', 2, '', 3, 4);

$b = array_values(array_filter($a));

print_r($b)

user2511140 answered 2019-01-15T21:52:56Z

7 votes

我使用以下脚本从数组中删除空元素

for ($i=0; $i

{

if (empty($Array[$i])) unset($Array[$i]);

}

concept w answered 2019-01-15T21:53:18Z

7 votes

对于多维数组

$data = array_map('array_filter', $data);

$data = array_filter($data);

HMagdy answered 2019-01-15T21:53:41Z

7 votes

我必须这样做才能保持(字符串)0的数组值

$url = array_filter($data, function ($value) {

return (!empty($value) || $value === 0 || $value==='0');

});

Matt answered 2019-01-15T21:54:04Z

6 votes

$out_array = array_filter($input_array, function($item)

{

return !empty($item['key_of_array_to_check_whether_it_is_empty']);

}

);

Naitik Shah answered 2019-01-15T21:54:19Z

5 votes

只是想为循环做出贡献......也解决密钥中的空白问题......

在我的情况下,我希望在操作完成时保留顺序数组键(不仅仅是奇数,这就是我正在盯着的。设置代码以查找奇数键对我来说似乎很脆弱而且对未来不友好。)

我正在寻找更像这样的东西:[http://gotofritz.net/blog/howto/removing-empty-array-elements-php/]

array_filter和array_slice的组合起到了作用。

$example = array_filter($example);

$example = array_slice($example,0);

不知道效率或基准,但它的工作原理。

Chrisdigital answered 2019-01-15T21:55:14Z

5 votes

function trim_array($Array)

{

foreach ($Array as $value) {

if(trim($value) === '') {

$index = array_search($value, $Array);

unset($Array[$index]);

}

}

return $Array;

}

ali Farmani answered 2019-01-15T21:55:29Z

4 votes

foreach($arr as $key => $val){

if (empty($val)) unset($arr[$key];

}

mak ashtekar answered 2019-01-15T21:55:45Z

4 votes

使用array_filter函数删除空值:

$linksArray = array_filter($linksArray);

print_r($linksArray);

Ankit Gupta answered 2019-01-15T21:56:07Z

4 votes

只有一行:更新(感谢@suther):

$array_without_empty_values = array_filter($array);

Matt answered 2019-01-15T21:56:28Z

4 votes

$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 . '
';

}

产量

1:5

2:6

Naitik Shah answered 2019-01-15T21:56:59Z

2 votes

删除空数组元素

function removeEmptyElements(&$element)

{

if (is_array($element)) {

if ($key = key($element)) {

$element[$key] = array_filter($element);

}

if (count($element) != count($element, COUNT_RECURSIVE)) {

$element = array_filter(current($element), __FUNCTION__);

}

return $element;

} else {

return empty($element) ? false : $element;

}

}

$data = array(

'horarios' => array(),

'grupos' => array(

'1A' => array(

'Juan' => array(

'calificaciones' => array(

'Matematicas' => 8,

'Español' => 5,

'Ingles' => 9,

),

'asistencias' => array(

'enero' => 20,

'febrero' => 10,

'marzo' => '',

)

),

'Damian' => array(

'calificaciones' => array(

'Matematicas' => 10,

'Español' => '',

'Ingles' => 9,

),

'asistencias' => array(

'enero' => 20,

'febrero' => '',

'marzo' => 5,

)

),

),

'1B' => array(

'Mariana' => array(

'calificaciones' => array(

'Matematicas' => null,

'Español' => 7,

'Ingles' => 9,

),

'asistencias' => array(

'enero' => null,

'febrero' => 5,

'marzo' => 5,

)

),

),

)

);

$data = array_filter($data, 'removeEmptyElements');

var_dump($data);

有用!

iBet7o answered 2019-01-15T21:57:29Z

0 votes

试试这个 ****例

$or = array(

'PersonalInformation.first_name' => $this->request->data['User']['first_name'],

'PersonalInformation.last_name' => $this->request->data['User']['last_name'],

'PersonalInformation.primary_phone' => $this->request->data['User']['primary_phone'],

'PersonalInformation.dob' => $this->request->data['User']['dob'],

'User.email' => $this->request->data['User']['email'],

);

$or = array_filter($or);

$condition = array(

'User.role' => array('U', 'P'),

'User.user_status' => array('active', 'lead', 'inactive'),

'OR' => $or

);

Ashish pathak answered 2019-01-15T21:57:51Z

0 votes

根据您的方法,您可以在另一个数组中捕获这些元素并使用如下所示的元素,

foreach($linksArray as $link){

if(!empty($link)){

$new_arr[] = $link

}

}

print_r($new_arr);

Shahrukh Anwar answered 2019-01-15T21:58:14Z

php如何删除数组中的空元素,php - 删除空数组元素相关推荐

  1. LeetCode19. Remove Nth Node From End of List 删除链表中的倒数第n个位置的元素

    前言 本文是LeetCode19. Remove Nth Node From End of List解法,这个题目需要删除链表中的倒数第n个位置的元素 代码 # -*- coding: utf-8 - ...

  2. 已知带头结点单链表中各结点的元素值为整形且递增有序,设计算法删除链表中所有大于mink且小于maxk的元素,并释放被删结点的空间。

    核心函数如下: void LinkList_clear(LinkList &L,int mink,int maxk) {node *q,*t,*p,*r;p = L->next;whil ...

  3. 找出数组中所有出现次数大于n/k的元素

    1.问题描述: 给定一组数据num,以及一个整数k,找出其中所有出现频度大于n/k的元素 2.分析: 因为要出现频度大于n/k 那么就说明 当前数组中只有k-1个这样的数字,因为 n/k * (k) ...

  4. 求两个有序数组中的中位数和第k小的元素

    我们首先来看一下这一类题算法的原型: 对应牛客网链接: https://www.nowcoder.com/practice/08588d568e164e0a9958b5d6a3c351f5?tpId= ...

  5. php 去除二维数组中的包含某一个值的数组

    今天写程序,遇到一个的问题. 我想把一个二维数组中的包含某一个值的数组去掉,并重新生成索引下标 例如: $all_zone=array(array("id"=>"R ...

  6. Java黑皮书课后题第8章:*8.27(列排序)用下面的方法实现一个二维数组中的列排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.27(列排序)用下面的方法实现一个二维数组中的列排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  7. Java黑皮书课后题第8章:*8.26(行排序)用下面的方法实现一个二维数组中的行排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.26(行排序)用下面的方法实现一个二维数组中的行排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  8. c语言去掉数组中重复的,C语言删除无序整型数组中的重复元素及时间复杂度

    数组重复的问题在任何编程中都会有碰到了,这里介绍C语言删除无序整型数组中的重复元素及时间复杂度,希望对各位有帮助. 遇到一个题,大概要求是写一个函数处理来去掉一个无序的整型数组(例如int i_arr ...

  9. 【Leetcode栈与队列】1047.删除字符串中的所有相邻重复项 6120.数组能形成多少数对(一些题外话和做题经验!!看作对对碰游戏!!)

    文章目录 题外话 1.游戏开发可能使用栈结构 2.编程语言的一些功能实现也会使用栈结构 Leetcode 1047.删除字符串中的所有相邻重复项 1.问题描述 2.解决方案 Leetcode 6120 ...

  10. java数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...

    方法一:以空间换时间,可以定义一个计数数组int count[101],用来对数组中数字出现的次数进行计数(只能针对数组中数字的范围1~100),count数组中最大的元素对应的下标,即为出现次数最多 ...

最新文章

  1. 以太坊开启区块链2.0时代
  2. 智源青年科学家张新雨:从模型平均到集成学习、迁移学习
  3. opencv 阈值分割 — threshold()
  4. SQL SERVER2005加密解密数据
  5. Shell中的case语句
  6. 大数的相加 乘 余 幂
  7. 代码的世界中,一个逻辑套着另外一个逻辑,如何让每一种逻辑在代码中都有迹可循?...
  8. BeetleX服务网关流量控制
  9. Oracle --JOB
  10. 学校计算机房的占地面积是78,国内哪所国际高中好,可以考取美国大学
  11. background的认识(二)
  12. python获取指定字符串中重复模式最高的字符串
  13. mysql 月份去0_mysql 查询每个月发布的文章数。月份无数据显示为0。如何写SQL呢...
  14. 获CNNVD感谢信!知道创宇以专业漏洞研究能力支撑“漏洞通报”业务
  15. b2c京东流程图_京东商城网上交易流程分析
  16. python三菱fx3u通讯mx_[实例]三菱FX3U-485无协议通讯程序(含程序段)
  17. 经典蓝牙Inquiry过程的跳频
  18. Centos7云服务器部署SpringBoot项目(手动配置环境篇)
  19. 谈一谈游戏AI - 行为树
  20. C++ boost库中的sp_counted_base实现解析

热门文章

  1. 魔声monster - 耳机-煲耳机-方法
  2. 古文字识别助手与众包平台——项目博客三
  3. Abp项目模板使用Oracle数据库包括系统权限管理
  4. JavaScript高级程序设计(第三章)
  5. 联想塔式服务器性能,联想ST550:塔式服务器中的战斗机
  6. 如何正确使用git(以码云为例)
  7. 存储卡插上时显示目录乱码打不开请问如何才能修复
  8. 完美国际单机修改服务器端,完美国际改国内版单机一键服务端
  9. 查看、修改vue启动命令
  10. vuepress文档服务器,VuePress超详细简单教程