私はこの配列を持っています:
$aryMain = array(array('hello','bye'), array('',''),array('',''));
これは csv ファイルを読み取ることによって形成され、array('','') はファイルの末尾にある空の行です。
どうすれば削除できますか?
私はもう試した:
$aryMain = array_filter($aryMain);
しかし、それは機能していません:(
どうもありがとう!
私はこの配列を持っています:
$aryMain = array(array('hello','bye'), array('',''),array('',''));
これは csv ファイルを読み取ることによって形成され、array('','') はファイルの末尾にある空の行です。
どうすれば削除できますか?
私はもう試した:
$aryMain = array_filter($aryMain);
しかし、それは機能していません:(
どうもありがとう!
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
(
)
)
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
メイン配列に適用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);
});
それがより効率的であるかどうかは議論の余地がありますが、メモリを節約する必要があります:)