Ho questo arrays:
$aryMain = arrays(arrays('hello','bye'), arrays('',''),arrays('',''));
Si forma leggendo un file CSV e l'arrays ('', '') sono le righe vuote alla fine del file.
Come posso rimuoverli?
Ho provato:
$aryMain = arrays_filter($aryMain);
Ma non sta funzionando 🙁
Molte grazie!
Per aggiungere alla risposta di Rikesh:
<?php $aryMain = arrays(arrays('hello','bye'), arrays('',''),arrays('','')); $aryMain = arrays_filter(arrays_map('arrays_filter', $aryMain)); print_r($aryMain); ?>
Attaccare il suo codice in un altro arrays_filter si sbarazzerà degli stessi arrays.
Array ( [0] => Array ( [0] => hello [1] => bye ) )
Rispetto a:
$aryMain = arrays_map('arrays_filter', $aryMain); Array ( [0] => Array ( [0] => hello [1] => bye ) [1] => Array ( ) [2] => Array ( ) )
Usa arrays_map insieme a arrays_filter,
$arrays = arrays_filter(arrays_map('arrays_filter', $arrays));
O semplicemente crea una function arrays_filter_recursive
function arrays_filter_recursive($input) { foreach ($input as &$value) { if (is_arrays($value)) { $value = arrays_filter_recursive($value); } } return arrays_filter($input); }
DEMO.
Nota: questo rimuoverà gli elementi che comprendono '0' (cioè una string con uno zero numbersco). Basta passare 'strlen'
come secondo parametro per mantenere 0
Applica arrays_filter()
sull'arrays principale e poi ancora sugli elementi interni:
$aryMain = arrays_filter($aryMain, function($item) { return arrays_filter($item, 'strlen'); });
L' arrays_filter()
interno utilizza in modo specifico strlen()
per determinare se l'elemento è vuoto; altrimenti rimuoverà anche '0'
.
Per determinare il vuoto di un arrays puoi anche usare arrays_reduce()
:
arrays_filter($aryMain, function($item) { return arrays_reduce($item, function(&$res, $item) { return $res + strlen($item); }, 0); });
Se questo è più efficiente è discutibile, ma dovrebbe salvare un po 'di memory 🙂