7

私はこの配列を持っています:

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

これは csv ファイルを読み取ることによって形成され、array('','') はファイルの末尾にある空の行です。

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

私はもう試した:

$aryMain = array_filter($aryMain);  

しかし、それは機能していません:(

どうもありがとう!

4

3 に答える 3

18

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

)
于 2013-05-14T07:05:50.240 に答える
10

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

デモ。

注: これにより、'0' (数字ゼロの文字列) を含むアイテムが削除されることに注意してください。'strlen'保持する2番目のパラメーターとして渡すだけです0

于 2013-05-14T07:01:46.873 に答える
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);
});

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

于 2013-05-14T07:08:26.967 に答える