Corso base di Php - Lezione 3

Operatori e funzioni di numeri. Gli array.



[ZEUS News - www.zeusnews.it - 01-10-2008]

Lezioni precedenti
Prima lezione
Seconda lezione

Numeri: operatori e funzioni

Anche i numeri hanno i loro operatori e le loro funzioni. Gli operatori base sono = + - * / e il loro significato è ovvio. Un altro operatore importante è % che indica il resto della diviosione intera. Gli operatori aritmetici seguono le precedenze degli operatori aritmetici "veri".

Esistono altri quattro operatori importanti che sono ++ e --, entrambi nelle due versioni di post incremento / post decremento e pre incremento / pre decremento. Analizziamo quest'ultimo punto:

<?php
  $a=5;
  $b=5;
  $a++;
  ++$b;
  print 'a: ' . $a . '<br/>';
  print 'b: ' . $b . '<br/>';

?>

Se eseguite il codice vedrete che $a e $b valgono entrambe 6. Gli operatori di pre e post incremento aumentano di 1 il valore della variabile su cui operano; se usati in una sola istruzione sono equivalenti.

Le cose cambiano se vengono usati in operazioni composte oppure in passaggi di parametri:

<?php
  $a=5;
  $b=5;
  $post=$a++;
  $pre=++$b;
  print 'a vale ' . $a . ' e post vale ' . $post . '<br/>';
  print 'b vale ' . $b . ' e b vale ' . $pre . '<br/>';
?>

Se eseguite il codice vedrete che $a viene prima assegnata a $post e poi incrementata, mentre $b viene prima incrementata e poi assegnata. In pratica il pre incremento ha precedenza sull'assegnazione (o su qualunque altra operazione) mentre il post incremento avviene sempre dopo.

Dovete prestare attenzione quando utilizzate questi operatori insieme ad altro, perché è facile incorrere in cose come la seguente:

<?php
  $a=6;
  $b=1;
  $c=$a/--$b;
  print $c; 
?>

che è molto diverso da:

<?php
  $a=6;
  $b=1;
  $c=$a/$b--;
  print $c; 
?>

Esistono anche gli operatori di assegnazione composta: += -= /= *= %= .= e altri che vedremo più avanti. Esempio:

<?php
  $a=50;  
  $a+=4;  // equivale a $a=$a+4;
  $a-=8;  // equivale a $a=$a-8;
  $a*=3;  // equivale a $a=$a*3;
  $a/=2;  // equivale a $a=$a/2;
  $a%=4;  // equivale a $a=$a%4;  
  $str='ciao';
  $str.=' a tutti';  // equivale a $str=$str . ' a tutti';
?>

Questi sono (in teoria) più veloci delle scritture equivalenti. Potete mischiarli con gli operatori di pre e post incremento / decremento, ma state attenti alle precedenze per non trovarvi nei guai.

Qui sotto alcuni esempi di funzioni sui numeri:

<?php
  $a=4.6;
  print floor($a) . '<br/>';
    // arrotonda all'intero inferiore (4)
  print round($a) . '<br/>';;
    // arrotonda (5)
  print ceil($a) . '<br/>';;
    // arrotonda all'intero superiore (5)
?>

A questo punto è inutile andare avanti a fare un elenco infinito di funzioni: le descriveremo quando capiterà di doverle usare nelle lezioni successive.

Array

Un tipo di dati molto importante nella programmazione è rappresentato dall'array. Un array (nel concetto più semplice) è un insieme di locazioni continue aventi lo stesso nome e indicizzate tramite una chiave. Pensate a una serie di coppie chiave-valore: a ogni chiave corrisponde un valore. E' possibile definire array di molte dimensioni: in questo caso si parla di array di array.

Php può gestire array con gli elementi dello stesso tipo, con elementi di tipi diversi e gli elementi possono essere oggetti. Abbiamo a disposizione due tipi di array: quelli con indice numerico e quelli associativi.

Facciamo un esempio per definire un array di una dimensione:

<?php
  $a=array();
  
  $a[0]=3.6;
  $a[1]=5;
  $a[2]='ciao';
  
  print '<pre>';
  print_r($a);
  print '</pre>';
?>

array(), anche se sembra una funzione, in realtà è un'istruzione come lo è print. Utilizzata come nell'esempio dichiara semplicemente che $a è un array e senza la riga "$a=array();" il programma avrebbe generato lo stesso output.

Non dobbiamo decidere a priori quanti elementi compongono il vettore: in Php i vettori sono sempre dinamici.

La funzione print_r() riceve come parametro un array e lo stampa in modo che sia leggibile. Ciò che viene racchiuso tra <pre> e </pre> viene buttato fuori così come è scritto, senza formattare.

Il nostro array contiene 3 elementi di tre tipi diversi e i loro indici vanno da 0 a 2. Gli indici dei vettori iniziano da 0. Possiamo produrre array con "buchi", ossia non siamo costretti ad avere gli indici contigui:

<?php
  $a=array();
  
  $a[2]=3.6;
  $a[4]=5;
  $a[6]='ciao';
  
  print '<pre>';
  print_r($a);
  print '</pre>';
?>

Inizializzare numerosi array in questo modo però è scomodo; ma Php è abbastanza potente per permetterci di fare di meglio.

<?php
  $a=array(3.6,5,'ciao');
  
  print '<pre>';
  print_r($a);
  print '</pre>';
?>

Come nel primo esempio, gli indici saranno 0, 1, 2. Possiamo forzare le chiavi del vettore nel modo che segue, ottenendo il risultato del secondo esempio:

<?php
  $a=array(2=>3.6,4=>5,6=>'ciao');
  
  print '<pre>';
  print_r($a);
  print '</pre>';
?>

Possiamo far crescere il vettore "sommandogli" dei valori:

<?php
  $a=array(3.6,5,'ciao');
  
  $a[]=6;
  $a[]=9;
  
  print '<pre>';
  print_r($a);
  print '</pre>';
?>

e Php aggiungerà alla fine i valori.

Per creare array di 2 dimensioni possiamo procedere così, creando un vettore di 3 righe e al momento 0 colonne:

<?php
  $a=array();
  
  $a[]=array();
  $a[]=array();
  $a[]=array();
  
  print '<pre>';
  print_r($a);
  print '</pre>'; 
?>

Ora possiamo riempire la matrice:

<?php
  $a=array();
 
  $a[]=array();
  $a[]=array();
  $a[]=array();
  
  $a[0][0]=2;
  $a[0][1]=5;
  $a[0][2]=8.7;
  
  $a[1][0]=5;
  $a[1][1]=3;
  $a[1][2]='PIPPO';
  
  $a[2][0]=5.98;
  $a[2][1]='casa';
  $a[2][2]=4*3;
  
  print '<pre>';
  print_r($a);
  print '</pre>';
?>

Abbiamo ottenuto una matrice quadrata 3x3. Non siamo però costretti a creare matrici rettangolari:

<?php
  $a=array();
  
  $a[]=array();
  $a[]=array();
  $a[]=array();
  
  $a[0][0]=2;
  $a[0][1]=5;
  $a[0][2]=8.7;
  
  $a[1][0]=5;
  $a[1][1]=3;
  $a[1][2]='PIPPO';
  
  $a[2][0]=5.98;
  $a[2][1]='casa';
  $a[2][2]=4*3;
  $a[2][3]=1;
  $a[2][4]=1;
  $a[2][5]=1;
  
  print '<pre>';
  print_r($a);
  print '</pre>';
?>

e la riga di indice 2 avrà 6 elementi anzichè 3.

Il precedente equivale a:

<?php
  $a=array
  (
     array(2,5,8.7),
     array(5,3,'PIPPO'),
     array(5.98,'casa',4*3,1,1,1)
  );
   
  print '<pre>';
  print_r($a);
  print '</pre>'; 
?>

Esiste la possibilità di creare array associativi; sono array che hanno delle stringhe come indici:

<?php
  $a=array
  (
     'saluta' => 'ciao',
     'insulta' => 'scemo',
     'ridi' => 'asd'
  );
   
  print '<pre>';
  print_r($a);
  print '</pre>';
?>

Se per accedere a un elemento di indice 1 in un vettore $a con chiavi numeriche scriveremo $a[1]. Per accedere all'elemento 'insulta' scriveremo $a['insulta'].

Possiamo anche avere array misti:

<?php
  $a=array
  (
     0=>1,
     'saluta' => 'ciao',
     'insulta' => 'scemo',
     2=>34,
     3=>'pippo',
     'ridi' => 'asd'
  );
   
  print '<pre>';
  print_r($a);
  print '</pre>'; 
?>

Tramite la funzione count() possiamo ottenere il numero di elementi di un vettore: count($a) del vettore precedente ritornerà 6.

Php prevede anche per gli array un numero elevato di funzioni che permettono la gestione degli stessi in maniera efficente. Come per le stringhe e i numeri, vedremo via via l'uso di alcune importanti funzioni durante il susseguirsi delle lezioni.

La prossima volta analizzeremo i costrutti condizionali e quelli iterativi, così saremo pronti per scrivere i primi script semplici. Codice dopo codice scopriremo varie funzioni e vari modi di fare la stessa cosa, che a seconda dei casi si dimostreranno più o meno comodi.

Se questo articolo ti è piaciuto e vuoi rimanere sempre informato con Zeus News ti consigliamo di iscriverti alla Newsletter gratuita. Inoltre puoi consigliare l'articolo utilizzando uno dei pulsanti qui sotto, inserire un commento (anche anonimo) o segnalare un refuso.
© RIPRODUZIONE RISERVATA

Commenti all'articolo (0)


La liberta' di parola e' un diritto inviolabile, ma nei forum di Zeus News vige un regolamento che impone delle restrizioni e che l'utente e' tenuto a rispettare. I moderatori si riservano il diritto di cancellare o modificare i commenti inseriti dagli utenti, senza dover fornire giustificazione alcuna. Gli utenti non registrati al forum inoltre sono sottoposti a moderazione preventiva. La responsabilita' dei commenti ricade esclusivamente sui rispettivi autori. I principali consigli: rimani sempre in argomento; evita commenti offensivi, volgari, violenti o che inneggiano all'illegalita'; non inserire dati personali, link inutili o spam in generale.
E' VIETATA la riproduzione dei testi e delle immagini senza l'espressa autorizzazione scritta di Zeus News. Tutti i marchi e i marchi registrati citati sono di proprietà delle rispettive società. Informativa sulla privacy. I tuoi suggerimenti sono di vitale importanza per Zeus News. Contatta la redazione e contribuisci anche tu a migliorare il sito: pubblicheremo sui forum le lettere piu' interessanti.
Sondaggio
Qual è la più grande inquietudine che hai a casa e che la domotica potrebbe risolvere?
Sentirsi insicuri in casa quando si è lì da soli.
Che le persone lascino le luci accese quando non serve.
Dimenticarsi se le porte sono state chiuse a chiave o se le finestre sono state chiuse a dovere.
Familiari anziani non autosufficienti quando in casa sono soli.
Preoccuparsi della sicurezza quando siamo lontani.
Perdere tempo a girare per casa ad accendere o spegnere le luci.
Preoccuparsi che le attrezzature della cucina (per esempio il forno) siano state lasciate accese accidentalmente.
Preoccuparsi che la casa sembri vuota quando siamo lontani.
Possibili incidenti nelle zone della casa che non sono adeguatamente illuminate durante la notte.
La casa è troppo calda o troppo fredda per il dovuto comfort.

Mostra i risultati (1173 voti)
Dicembre 2025
PagoPA lascia il MEF: Poste e Poligrafico rilevano la società per mezzo miliardo
Dalla frustrazione alla performance: imprecare rende più forti e resistenti
Ordina RAM DDR 5 su Amazon, riceve DDR 2: ecco come funziona la truffa del reso
Televisori LG, dopo l'aggiornamento compare l'app di Copilot. E non si può più togliere
Google lancia la traduzione simultanea universale: bastano qualsiasi telefono Android e auricolari
Tassa da 2 euro sui pacchi fino a 150 euro: la Manovra 2026 coinvolge milioni di spedizioni
Lo script open source che fa sparire Copilot, Recall e gli altri componenti IA da Windows 11
Google Antigravity cancella un intero drive: la IA si scusa, ma i dati sono persi
Migliaia di aerei A320 a terra. Perché è una buona notizia
Arduino passa a Qualcomm: la comunità hacker esplode di malcontento
Piracy Shield, i provider italiani presentano il conto: 10 milioni di euro l'anno
Il Digital Omnibus è una resa dell'Unione Europea?
Novembre 2025
MediaWorld vende iPad a 15 euro per errore, adesso li vuole tutti indietro
Riscaldano casa con un datacenter in giardino: giù i costi delle bollette
I Baschi Grigi della Cybersicurezza
Tutti gli Arretrati
Accadde oggi - 27 dicembre


web metrics