2013-05-14 75 views
6

我有這樣的陣列:PHP:刪除空字符串數組在多維數組

$aryMain = array(array('hello','bye'), array('',''),array('','')); 

它是由在端部讀取csv文件和陣列(「」,「」)是空行形成文件。

我該如何刪除它們?

我已經試過:

$aryMain = array_filter($aryMain); 

但它不工作:(

非常感謝

+2

爲什麼不直接跳過這些空行第一個地方? – 2013-05-14 07:03:30

回答

17

爲了增加Rikesh的回答是:

<?php 
$aryMain = array(array('hello','bye'), array('',''),array('','')); 
$aryMain = array_filter(array_map('array_filter', $aryMain)); 
print_r($aryMain); 

?> 

堅持自己的代碼轉換成另一種array_filter將擺脫整個陣列本身。

Array 
(
    [0] => Array 
     (
      [0] => hello 
      [1] => bye 
     ) 

) 

相比:

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

Array 
(
    [0] => Array 
     (
      [0] => hello 
      [1] => bye 
     ) 

    [1] => Array 
     (
     ) 

    [2] => Array 
     (
     ) 

) 
+0

@MiguelMas請記住,像'0'這樣的字符串也會以這種方式被刪除。 – 2013-05-14 07:17:17

9

使用array_map與array_filter一起,

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

或者只!創建一個array_filter_recursive函數

function array_filter_recursive($input) 
{ 
    foreach ($input as &$value) 
    { 
     if (is_array($value)) 
     { 
     $value = array_filter_recursive($value); 
     } 
    }  
    return array_filter($input); 
} 

DEMO.

注:這將移除包含 '0' 的項目(即帶數字零的字符串)。只是通過'strlen'作爲第二個參數,以保持0

+1

Upvoted因爲strlen提示! – MarkokraM 2017-01-31 04:35:15

2

在所述內元件的主陣列上應用array_filter()然後再次:

$aryMain = array_filter($aryMain, function($item) { 
    return array_filter($item, 'strlen'); 
}); 

array_filter()具體使用strlen(),以確定是否該元件是空的;否則它會刪除'0'

要確定一個數組的空虛,你也可以使用array_reduce()

array_filter($aryMain, function($item) { 
    return array_reduce($item, function(&$res, $item) { 
     return $res + strlen($item); 
    }, 0); 
}); 

這是否是更有效的是值得商榷的,但它應該節省一些內存:)