2013-05-14 24 views
6

に空の配列の文字列を削除します。PHP:私はこの配列を持つ多次元配列

それはの最後に空の行を(「「」」)csvファイルと配列を読んでいることによって形成される
$aryMain = array(array('hello','bye'), array('',''),array('','')); 

ファイル。

どうすれば削除できますか?

私が試した:

$aryMain = array_filter($aryMain); 

をしかし、それは、:(

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

それともをarray_filterと一緒にたくさん

+2

理由だけで、それらの空行をスキップしません最初の場所? –

答えて

17

を維持するための2番目のパラメータとして'strlen'を渡す:別のarray_filterに彼のコードを貼り付ける

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

?> 

は、全体の配列そのものを取り除くでしょう。

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

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

    [1] => Array 
     (
     ) 

    [2] => Array 
     (
     ) 

) 
+0

@MiguelMas ''0 ''のような文字列もこのように削除されることに注意してください。 –

9

使用array_map

おかげで動作していません! 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' を含むアイテムを削除すること(すなわち、数字が0の文字列)。ただ、Rikeshの答えに追加するには0

+1

strlenのチップのためにUpvoted! – MarkokraM

2

内側要素にもう一度メインアレイ上array_filter()を適用して:

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

内側array_filter()は、具体的には要素かどうかを決定するためにstrlen()を使用と比較

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

) 

空です。それ以外の場合は'0'も削除されます。あなたもarray_reduce()を使用することができ、アレイの虚しさを決定するために

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

それはより効率的なのかどうかは議論の余地があるが、それはいくつかのメモリを節約する必要があります:)