2013-05-14 13 views
6

mam tej tablicy:PHP usunięcia pustych ciągów tablicy w wielowymiarowej tablicy

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

jest utworzona przez odczytanie pliku CSV i macierzy („” „”) są puste wiersze na koniec plik.

Jak mogę je usunąć?

Próbowałem:

$aryMain = array_filter($aryMain); 

Ale to nie działa :(

dzięki dużo

+2

Dlaczego nie po prostu pominąć tych pustych wierszy w pierwsze miejsce? –

Odpowiedz

17

Aby dodać odpowiedź Rikesh za:

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

?> 

Kłucie jego kod do innego array_filter będzie pozbyć się całych samych tablic.

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

) 

porównaniu z:

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

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

    [1] => Array 
     (
     ) 

    [2] => Array 
     (
     ) 

) 
+0

@MiguelMas Należy pamiętać, że ciągi takie jak '0'' również zostaną usunięte w ten sposób. –

9

Korzystając array_map wraz z array_filter,

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

Albo po prostu! utworzyć funkcję 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.

Uwaga: to będzie to usunąć elementy obejmujące '0' (tj ciąg z cyfrą zero). Wystarczy przejść 'strlen' jako drugi parametr zachować 0

+1

Wznowienie z powodu wskazówka strlen! – MarkokraM

2

Zastosować array_filter() na głównej tablicy, a następnie jeszcze raz na wewnętrznych elementów:

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

Wewnętrzna array_filter() konkretnie wykorzystuje strlen() w celu określenia, czy element jest pusty; w przeciwnym razie usunie też '0'.

Aby ustalić pustkę tablicy można też użyć array_reduce():

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

czy to bardziej efektywne jest dyskusyjna, ale powinno zaoszczędzić trochę pamięci :)

Powiązane problemy