這篇文章主要介紹了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()函數刪除的話,數組的索引值沒有變化。