array_filter()
non è di tipo sensibile per impostazione predefinita. Ciò significa che qualsiasi zero ish, falso-y, verranno rimossi nulli, valori vuoti. I miei collegamenti da seguire dimostreranno questo punto.
matrice di ingresso del campione del PO è 2-dimensionale. Se la struttura dei dati è statica, la ricorsione non è necessaria. Per tutti coloro che desiderano filtrare i valori di lunghezza zero da una matrice multidimensionale, fornirò un metodo statico 2-dim e un metodo ricorsivo.
statico 2-dim Array: Questo codice esegue un filtro "zero-safe" sugli elementi 2 ° livello e quindi rimuove sottoarray vuoti: (See this demo to see this method work with different (trickier) array data)
$array=[
['Name'=>'','EmailAddress'=>'']
];
var_export(
array_filter( // remove the 2nd level in the event that all subarray elements are removed
array_map( // access/iterate 2nd level values
function($v){
return array_filter($v,'strlen'); // filter out subarray elements with zero-length values
},$array // the input array
)
)
);
Ecco lo stesso codice una battuta:
var_export(array_filter(array_map(function($v){return array_filter($v,'strlen');},$array)));
uscita (come originariamente specificato dal OP):
array (
)
* se non si desidera rimuovere i sottoarray vuote, è sufficiente rimuovere il esterna array_filter()
chiamata.
metodo ricorsivo per array multidimensionali sconosciuta profondità: Quando il numero di livelli in un array sono sconosciute, ricorsione è una tecnica logica. Il codice seguente elaborerà ogni sottoarray, rimuovendo i valori di lunghezza zero e qualsiasi sottoarray vuoto mentre procede. Here is a demo of this code with a few sample inputs.
$array=[
['Name'=>'','Array'=>['Keep'=>'Keep','Drop'=>['Drop2'=>'']],'EmailAddress'=>'','Pets'=>0,'Children'=>null],
['Name'=>'','EmailAddress'=>'','FavoriteNumber'=>'0']
];
function removeEmptyValuesAndSubarrays($array){
foreach($array as $k=>&$v){
if(is_array($v)){
$v=removeEmptyValuesAndSubarrays($v); // filter subarray and update array
if(!sizeof($v)){ // check array count
unset($array[$k]);
}
}elseif(!strlen($v)){ // this will handle (int) type values correctly
unset($array[$k]);
}
}
return $array;
}
var_export(removeEmptyValuesAndSubarrays($array));
uscita:
array (
0 =>
array (
'Array' =>
array (
'Keep' => 'Keep',
),
'Pets' => 0,
),
1 =>
array (
'FavoriteNumber' => '0',
),
)
Se qualcuno scopre una serie di input che spezza il metodo ricorsivo, si prega di postare (nella sua forma più semplice), come un commento e io aggiornare la mia risposta.
array_filter è impostato per gli array 1D. –
Puoi fornire un input di esempio, con l'output atteso per favore? Ci sono diversi modi di interpretare la tua domanda, * "Se sembra quanto sopra, io voglio che sia completamente vuoto dopo che l'avremo elaborata." * Mi sta gettando via, vuoi che sia totalmente andato o essere un array vuoto? –
Questo è un array multidimensionale. array_filter funziona solo in una dimensione. È necessario scorrere l'array e applicare array_filter a ogni iterazione prima. – Nilpo