- Home
- Categorie
- Coding e Sistemistica
- PHP
- Multiarray, rimozione valori inutili e array vuoti
-
Multiarray, rimozione valori inutili e array vuoti
Salve a tutti,
sto cercando di scrivere una funzione che manipoli un array multidimensionale con due routine. Per esempio sia di questo tipo:[PHP]$p = array (
'chiave_1' =>
array (
'chiave_2' =>
array (
'chiave_3' =>
array (
'chiave_4' =>
array (
0 => 'valore desiderato 1',
),
'chiave_5' =>
array (
1 => 'valore desiderato 1',
),
'chiave_6' =>
array (
1 => 'valore desiderato 1',
2 => 'valore desiderato 3',
),
),
'chiave_7' =>
array (
'chiave_8' =>
array (
0 => 'valore sgradito',
),
),
),
),
);[/PHP]La prima routine della funzione ha lo scopo di verificare se i valori delle foglie appartenessero all'array dei desiderati
[PHP]$desiderati = array('valore desiderato 1' , 'valore desiderato 2' , 'valore desiderato 3');[/PHP]
Nel caso in cui non fosse presente quel valore dovrà essere rimosso.
La seconda routine ha lo scopo di rimuovere ricorsivamente le chiavi a cui sono associati gli array vuoti. Quindi prima verrà deallocata prima l'array associato a "chiave_8" e poi quello con "chiave_7" perché conterrà un array vuoto.
In definitiva il risultato sarà:
Array ( [chiave_1] => Array ( [chiave_2] => Array ( [chiave_3] => Array ( [chiave_4] => Array ( [0] => valore desiderato 1 ) [chiave_5] => Array ( [1] => valore desiderato 1 ) [chiave_6] => Array ( [1] => valore desiderato 1 [2] => valore desiderato 3 ) ) ) ) )
Ho scritto questo codice:
[PHP]function pulizia_ricorsiva ( &$arr , $desiderati )
{
if ( ! is_array( $arr ) )
die ("La funzione 'pulizia_ricorsiva' non ha ricevuto un array");foreach ($arr as $k1 => $ary) if ( ! is_numeric( $k1 ) && is_array( $ary ) ) foreach ($ary as $k2 => $val) if ( is_numeric( $k2 ) ) { if ( ! in_array( $val , $desiderati ) ) unset( $ary[$k2] ); } else pulizia_ricorsiva( $ary , $desiderati );
}[/PHP]
Ma non funziona correttamente. Me lo potreste cortesemente correggere?
Un grazie in anticipo a chi mi aiuterà.