• User Attivo

    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à.