• 2018-12-06 191523
  • 2018-11-22 145009
  • 2018-11-24 163752
  • 2018-12-01 121211
  • 2018-12-05 175943
  • 2018-11-28 151134
  • 2018-12-02 144318
  • 2018-11-24 163743

Script

Qui puoi ricercare e trovare alcuni Script che ho voluto pubblicare per condividerli con voi.

Convertire Array PHP in Json




Recentemente mi sono trovato a trasferire un dominio, e relativo sito web, su un Server diverso.

Al momento di testare il funzionamento del sito, con mio grande rammarico, mi sono accorto che alcune pagine non funzionavano. Indagando sulle cause ho visto che sul nuovo Server era installata una versione di PHP più datata, e precisamente la 5.1.6. In questa versione del PHP non è stata ancora implementata la funzione json_encode, che viene invece implementata dalla versione 5.2.0 e successive.

Ho quindi dovuto sopperire alla mancanza di tale versione, il cui scopo è quello di restituire la rappresentazione JSON di un valore PHP (generalmente un Array), implementando una funzione analoga.

JSON: Acronimo di JavaScript Object Notation, il JSON è un formato adatto per lo scambio dei dati in applicazioni client-server. La semplicità di JSON ne ha decretato un rapido utilizzo specialmente nella programmazione in AJAX. Questo fatto lo ha reso velocemente molto popolare a causa della diffusione della programmazione in JavaScript nel mondo del Web.

I tipi di dati supportati da questo formato sono:

  • booleani (true e false);
  • interi, reali, virgola mobile;
  • stringhe racchiuse da doppi apici ( " );
  • array (sequenze ordinate di valori, separati da virgole e racchiusi in parentesi quadre [ ] );
  • array associativi (sequenze coppie chiave-valore separate da virgole racchiuse in parentesi graffe);
  • null.

Cercando su internet, ho trovato qui, quello di cui avevo bisogno. Si tratta di una funzione ricorsiva, che produne una rappresentazione Json, del valore che gli viene passato.

Ecco la funzione:

function array2json($arr) {
    if(function_exists('json_encode')) return json_encode($arr); //Lastest versions of PHP already has this functionality.
    $parts = array();
    $is_list = false;

    //Find out if the given array is a numerical array
    $keys = array_keys($arr);
    $max_length = count($arr)-1;
    if(($keys[0] == 0) and ($keys[$max_length] == $max_length)) {//See if the first key is 0 and last key is length - 1
        $is_list = true;
        for($i=0; $i<count($keys); $i++) { //See if each key correspondes to its position
            if($i != $keys[$i]) { //A key fails at position check.
                $is_list = false; //It is an associative array.
                break;
            }
        }
    }

    foreach($arr as $key=>$value) {
        if(is_array($value)) { //Custom handling for arrays
            if($is_list) $parts[] = array2json($value); /* :RECURSION: */
            else $parts[] = '"' . $key . '":' . array2json($value); /* :RECURSION: */
        } else {
            $str = '';
            if(!$is_list) $str = '"' . $ke
y . '":';

            //Custom handling for multiple data types
            //if(is_numeric($value)) $str .= $value; //Numbers
            if(is_numeric($value)) $str .= "\"" . $value . "\""; //Numbers MAXTAC MODIFICA
            elseif($value === false) $str .= 'false'; //The booleans
            elseif($value === true) $str .= 'true';
            else $str .= '"' . $value . '"'; //All other things MAXTAC MODIFICA
            //else $str .= '"' . addslashes($value) . '"'; //All other things
            // :TODO: Is there any more datatype we should be in the lookout for? (Object?)

            $parts[] = $str;
        }
    }
    $json = implode(',',$parts);
    
    if($is_list) return '[' . $json . ']';//Return numerical JSON
    return '{' . $json . '}';//Return associative JSON
}

Alla Riga numero 2, la funzione controlla subito se la versione corrente di PHP ha implementata la funzione json_encode, e se la funzione esiste, allora ritorna subito il risultato di tale funzione predefinita, senza proseguire nel suo Script

Alla riga 29, ho fatto una piccola modifica alla funzione per farmi restituire i valori numerici racchiusi all'interno di doppi apici ("). Un'altra piccola modifica alla riga 32 che sostituisce l'originale riga 33.

Per il resto non vi spiego ulteriormente la funzione. Ce solo da utilizzarla così:

$valoreJson = array2json($mioArray);