lunedì 30 aprile 2012

Introduzione al PHP: Gli Array - Inizializzare (Parte 2/2)

PHP fornisce un nutrito numero di funzioni per la manipolazione degli array. Fra queste ci sono delle funzioni per la creazione di array che sono range(), array_fill_keys() e array_fill().

La funzione range()
La funzione range consente di ottenere un array di valori adiacenti ovvero distanti un certo passo, specificando il solo valore iniziale e il limite sueriore/inferiore (a seconda che il limite sia maggiore o minore del valore iniziale). Qualora la funzione non riesca a portare a termine l'operazione produce un Warning e ritorna false. La sintassi è:



array range ( mixed $start , mixed $limit [, number $step = 1 ] )

Nella funzione range(), $start e $limit specificano rispettivamente il valore iniziale, che deve essere contenuto nell'array, ed il limite superiore/inferiore che può essere contenuto nell'array. Tali valori dovrebbero sempre essere di tipo int o string (viene utilizzato il primo carattere). $step, di tipo int specifica la distanza che intercorre tra un valore ed il successivo nell'array ossia il passo.

Ad esempio $arr=range(5,10) è equivalente a $arr=array(5,6,7,8,9,10) mentre $arr=range(5,10,2) è equivalente a $arr=array(5,7,9). In entrambi i casi i valori nell'array sono di tipo int.

Oltre ai valori interi è possibile utilizzare anche le stringhe come valore iniziale e limite. Ad esempio $arr=range("a","d") è equivalente a $arr=array("a","b","c","d") ed i valori nell'array sono di tipo string ossia possono essere utilizzati come stringhe aventi un solo carattere o come array di byte con un solo elemento.

E' anche possibile utilizzare dei valori float per inizio o limite, nel qual caso gli elementi dell'array saranno di tipo float. E' comunque sconsigliato l'utilizzo della funzione per la creazione di array i cui elementi siano di tipo diverso da int o string. Ad esempio, $arr = range(12, 12.5); dovrebbe produrre un array di un solo elemento di tipo float con valore 12. In realtà produce un Warning e ritorna false. Invece $arr = range(12, 13.5) è equivalente a $arr=array((float)12,(float)13).

Se uno dei due parametri, inizio e limite, è un int o float, l'altro parametro è convertito in int o float. Se i parametri inizio e limite sono di tipo diverso da int, string o float, questi sono convertiti in int.

La funzione array_fill()
La funzione aray_fill() permette di ottenere un array a chiave numerica di un numero prefissato di elementi i cui valori sono tutti uguali. La sintassi è:

array array_fill ( int $start_index , int $num , mixed $value )

in cui $start_index è la prima chiave numerica utilizzata nell'array prodotto. Sebbene tale valore possa essere anche negativo, solo il primo elemento ha chiave negativa, mentre i successivi procederanno da 0 in su. $num indica il numero di elementi che compongono l'array finale e deve essere strettamente maggiore di 0 o la funzione produce un Warning e ritorna false. $value è il valore assegnato ad ogni elemento dell'array.

Ad esempio $arr = array_fill(0, 5, "Pippo") è equivalente a $arr=array("Pippo", "Pippo", "Pippo", "Pippo", "Pippo").
Invece $arr = array_fill(-10, 5, $value) è equivalente a $arr = array(-10=>"Pippo", 0=>"Pippo", "Pippo", "Pippo", "Pippo").

Infine $arr = array_fill(0, 2, array("a","b")) è equivalente a $arr = array(array("a","b"),array("a","b")). Gli array multidimensionali saranno trattati nel prossimo post.

La funzione array_fill_keys()
Questa funzione è simile alla precedente, ma anziché richiedere la chiave indice iniziale e il numero di elementi, accetta come parametro un array. La sintassi è:

array array_fill_keys ( array $keys , mixed $value )

in cui $value è il valore assegnato ad ogni elemento del nuovo array e $keys è un array i cui valori sono utilizzati come indice per il nuovo array. Il nuovo array ha lunghezza pari al numero di valori distinti presenti in $keys.

Esistono anche altre funzioni che permettono di generare dei nuovi array partendo da altri array come array_combine() o array_merge(). Si consiglia di dare una lettura al manuale ufficiale per ciò che attiene tutte le funzioni relative agli array, anche al solo fine di sapere dell'esistenza di una funzione sugli array che svolge un certo compito.

Segue lo script index.php per il progetto DemoInitArray2

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Funzioni per la generazione di array</title>
    </head>
    <body>
        <h1>Funzioni per la generazione di array</h1>
        <?php
        $code =  <<<'EOT'
        <?php
        $arr = range(50, 45, 2); //array di interi da 50 a 45 (non compreso) con passo 2         
        $arr = range(5, 10); //array di interi da 5 a 10 con passo 1        
        $arr = range("a", "f", 2); //array di caratteri la cui codifica ASCII va dal carattere a al carattere f      
        $arr = range("a", "Z"); //array di caratteri la cui codifica ASCII va dal carattere a al carattere Z    
        $arr = range("Z", "a", 2); //array di lettere la cui codifica ASCII va dal carattere Z al carattere a con passo 2        
        ?>
EOT;
        $code = highlight_string($code,true);
        echo <<<"EOT"
        <h2>La funzione range()</h2>
        <code>
        $code
        </code>
EOT;
        $arr = range(50, 45, 2);
        var_dump($arr);
        $arr = range(5, 10);
        var_dump($arr);
        $arr = range("a", "f", 2);
        var_dump($arr);
        $arr = range("a", "Z");
        var_dump($arr);
        $arr = range("Z", "a", 2);
        var_dump($arr);
        
        
        $code =  <<<'EOT'
        <?php
        $value="Pippo";
        $values=array("Casa","Albero","Porta","Tazza");
        
        $arr = array_fill(0, 5, $value);       
        $arr = array_fill(0, 5, $values);        
        $arr = array_fill(-10, 5, $value);        
        ?>
EOT;
        $code = highlight_string($code,true);
        echo <<<"EOT"
        <h2>La funzione array_fill()</h2>
        <code>
        $code
        </code>
EOT;
        $value="Pippo";
        $values=array("Casa","Albero","Porta","Tazza");
        
        $arr = array_fill(0, 5, $value);
        var_dump($arr);
        $arr = array_fill(0, 5, $values);
        var_dump($arr);
        $arr = array_fill(-10, 5, $value);
        var_dump($arr);
        $arr = array_fill(-10, 1, $value);
        var_dump($arr);
        
        $code =  <<<'EOT'
        <?php
        $value="Pippo";
        $keys=array("Casa","Albero","Porta","Tazza","Albero");
        
        $arr = array_fill_keys($keys, $value);
        ?>
EOT;
        $code = highlight_string($code,true);
        echo <<<"EOT"
        <h2>La funzione array_fill_keys()</h2>
        <code>
        $code
        </code>
EOT;
        $value="Pippo";
        $keys=array("Casa","Albero","Porta","Tazza","Albero");
        
        $arr = array_fill_keys($keys, $value);
        var_dump($arr);            
        ?>
    </body>
</html>