这篇文章主要介绍了PHP删除数组中空值的方法介绍,须要的朋友能够参考下php
说来惭愧,之前在去掉数组的空值是都是强写foreach或者while的,利用这两个语法结构来删除数组中的空元素,简单代码以下:html
<?php foreach( $arr as $k=>$v){ if( !$v ) unset( $arr[$k] ); } ?>
并且自我感受还挺不错,只是这样的效率并不高也曾经试过,先将$arr转为对象,而后利用对象的特性来删除,由于:foreach是将当前操做的数组进行copy,每操做一下foreach,都是copy了一个变量,页面里面若是有太多的foreach,会是一个很大的消耗。数组
在网上闲逛的时候,看到人有提示用array_filter,以为很吃惊。打开手册瞅了一下,发现本身一直就守着个宝山殊不知道如何使用。函数
array_filter函数的功能是利用回调函数来对数组进行过滤,一直都觉得用回调函数才能处理,却没有发现手册下面还有一句,若是没有回调函数,那么默认就是删除数组中值为false的项目。url
<?php $entry = array( 0 => 'foo', 1 => false, 2 => -1, 3 => null, 4 => '' ); print_r(array_filter($entry)); ?>
Array
(
[0] => foo
[2] => -1
)
spa
看来,之后仍是要多看手册啊……就象array_slice同样也是个好东西。惋惜之前历来没有注意过。.net
附:另外一个例子code
$strDelCodes = "A;B;;C;;C;D;;;D;D"; $rsArray = array_values (array_unique (array_diff (split (";", $strDelCodes), array (""))));
数组$rsArray中存的值为:A B C Dhtm
array_values() 函数返回一个包含给定数组中全部键值的数组,但不保留键名。对象
array_diff() 函数返回两个数组的差集数组。该数组包括了全部在被比较的数组中,可是不在任何其余参数数组中的键值。
array_unique() 函数移除数组中的重复的值,并返回结果数组。当几个数组元素的值相等时,只保留第一个元素,其余的元素被删除。
返回的数组中键名不变。
array_merge() 函数把两个或多个数组合并为一个数组。
若是键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。若是数组是数字索引的,则键名会以连续方式从新索引。
---------------------
原文:https://blog.csdn.net/mp624183768/article/details/85059128
去除空元素方法一:(保持键值不变)
使用方法: <?php function myfunction($v) { if ($v != "") { return true; } return false; } print_r(array_filter($urlArr, "myfunction")); ?> 去除空元素方法二:(键值自增) 使用方法:$arr = array(); foreach ($urlArr as $key => $val) { if (empty($val)) { continue; } $arr[] = $val; }
/** * 去除多维数组中的空值 * @author * @return mixed * @param $arr 目标数组 * @param array $values 去除的值 默认 去除 '',null,false,0,'0',[] */ function filter_array($arr, $values = ['', null, false, 0, '0',[]]) { foreach ($arr as $k => $v) { if (is_array($v) && count($v)>0) { $arr[$k] = filter_array($v, $values); } foreach ($values as $value) { if ($v === $value) { unset($arr[$k]); break; } } } return $arr; }
php中删除数组元素是很是的简单的,但有时删除数组须要对索引进行一些排序要求咱们会使用到相关的函数,这里咱们来介绍使用unset,array_splice删除数组中的元素区别吧
若是要在某个数组中删除一个元素,能够直接用的unset,可是数组的索引不会重排:
<?php $arr = array('a','b','c','d'); unset($arr[1]); print_r($arr); ?> 结果是: Array ( [0] => a [2] => c [3] => d ) 那么怎么才能作到缺乏的元素会被填补而且数组会被从新索引呢?答案是array_splice(): <?php $arr = array('a','b','c','d'); array_splice($arr,1,1); print_r($arr); ?> 结果是: Array ( [0] => a [1] => c [2] => d ) 删除数组中特定元素 复制代码 <?php $arr2 = array(1,3, 5,7,8); foreach ($arr2 as $key=>$value){ if ($value === 3) unset($arr2[$key]); } var_dump($arr2); ?> 复制代码 补充删除空数组 实例: 复制代码 <?php $array = ('a' => "abc", 'b' => "bcd",'c' =>"cde",'d' =>"def",'e'=>""); array_filter($array); echo "<pre>"; print_r($array); ?> 复制代码 结果: Array ( [a] => abc [b] => bcd [c] => cde [d] => def ) 总结 array_splice()函数删除的话,数组的索引值也变化了。 unset()函数删除的话,数组的索引值没有变化。