10. Stringhe

In questo capitolo approfondiremo meglio le stringhe e il loro uso.
Potete racchiudere una stringa usando i doppi apici " o gli apici singoli '. Inoltre PHP 5 ci permette di gestire le stringhe come degli array, per mezzo delle parentesi graffe al posto delle quadre, in questo modo :

$stringa = "c";
$stringa{1} = 'i';
$stringa{2} = 'a';
echo $stringa . "o!"; // stampa : ciao!

Ci sono vari modi di stampare una stringa. Il più usato da me è echo, che essendo un costrutto del linguaggio e non una funzione, è possibile richiarmarlo senza parentesi, ma se preferite potete lasciarle.

Un altro modo è attraverso la funzione "print()", che ritorna il valore true quando riesce a stampare la stringa con successo, e il valore false se accade altrimenti.

Infine PHP ci fornisce un'altra funzione molto più avanzata : "printf()".
Questa funzione consente di inserire delle sottostringhe nella stringa, che consentono di dare una formattazione particolare a quest'ultima.

Le sottostringhe vengono identificate grazie al carattere percentuale/modulo "%", e vengono sostituite con i parametri che vengono passati dopo la stringa, a seconda del tipo di sottostringa specificata.

<

Di seguito un esempio chiarificatore :

printf('%.2f', 127.14457);
// stamperà : 127.14

Il carattere % indica dove deve essere stampato il secondo parametro passato a printf(), ossia il numero a virgola mobile 127.14457, e la sottostringa .2f, indica alla funzione che si tratta di un numero a virgola mobile (f = float) e che deve essere stampato con una precisione di 2 numeri dopo la virgola (.2).

Di seguito una tabella con tutti i caratteri per le sottostringhe, supportati da printf() :

Identificatore Significato
%b L'argomento è un numero intero e sarà visualizzato in base binaria
%c L'argomento è un numero intero e sarà visualizzato come carattere ASCII corrispondente
%d L'argomento è un numero intero e sarà visualizzato come un decimale con segno
%e L'argomento sarà visualizzato con la notazione scientifica (es. 2.4e 3)
%u L'argomento è un numero intero e sarà visualizzato come un decimale senza segno
%f L'argomento sarà visualizzato come un numero a virgola mobile influenzato dalle impostazioni
%F L'argomento sarà visualizzato come un numero a virgola mobile non influenzato dalle impostazioni
%o L'argomento è un numero intero e sarà visualizzato in base ottale
%s L'argomento è una stringa e sarà visualizzata come tale
%x L'argomento è un numero intero e sarà visualizzato in base esadecimale (in minuscolo)
%X L'argomento è un numero intero e sarà visualizzato in base esadecimale (in maiuscolo)

Per una documentazione completa sulla funzione printf(), vi rimando alla Documentazione Ufficiale da me segnalata nel capitolo Configurare PSPad.

Passeremo ora in rassegna le funzioni che useremo maggiormente quando costruiremo delle vere e proprie applicazioni, che dovranno manipolare dati prelevati da database o ancora peggio forniti dall'utente distratto.

Di seguito le funzioni usato per ripulire le stringhe dagli spazi inutili :

  • trim() - elimina tutti gli spazi vuoti all'inizio e alla fine della stringa
  • ltrim() - elimina tutti gli spazi vuoti all'inizio della stringa
  • rtrim() - elimina tutti gli spazi vuoti alla fine della stringa
$stringa = "     ciao!  ";
echo trim($stringa); // stampa "ciao!" invece di "     ciao!  "

Ora vediamo le principali funzioni usate per rendere visibili i caratteri usati dal codice HTML come il segno < e il simbolo &.
Immaginiamo di dover prelevare un frammento di codice HTML dal database, e di doverlo inserire nella nostra pagina PHP e farlo visualizzare così come si presenta, facendo quindi in modo che il codice HTML non venga quindi interpretato come tale, ma bensì come un testo da stampare sulla pagina.

$stringa = "<a href=\"pagina.html\">Homepage</a>";
$conversione = htmlspecialchars($stringa);

echo $stringa; // stamperà "<a href="pagina.html">Homepage</a>"

echo "<br /><br />"; // va a capo 2 volte
echo $conversione; // stamperà "&lt;a href=&quot;pagina.html&quot;&gt;Homepage&lt;/a&gt;"

La funzione htmlspecialchars() converte quindi i caratteri speciali in entità HTML.
In questo modo la stringa "$stringa" sarà interpretata come codice HTML e visualizzerà quindi il classico link, mentre la stringa "$conversione" produrrà in output una stringa normale, come potete vedere dal risultato ottenuto dal codice sopracitato.

La funzione "html_entity_decode()", invece, produce l'effetto contrario, stampando perciò "html_entity_decode($conversione)", ritorniamo ad ottenere la stringa iniziale.

Vediamo ora come confrontare due stringhe.
PHP ci mette a disposizione 2 operatori : == (Equal to) e === (Indentical to).

Esempio

$numero = 3;
$stringa = "3";

if ($numero == $stringa)
	echo "uguale"; // viene stampato

if ($numero === $stringa)
	echo "uguale"; // non viene stampato

Oltre questi 2 operatori, PHP ci fornisce svariate funzioni ... vediamo le 2 più importanti :

  • strcasecmp(stringa1, stringa2) - Confronta 2 stringhe senza tener conto di maiuscole e minuscole.
    Restituisce un intero minore di zero se stringa1 è minore di stringa2, oppure un intero maggiore di zero se stringa1 è maggiore di stringa2 e infine restituisce zero (0) se le due stringhe sono uguali.
  • strcmp(stringa1, stringa2) - Confronta 2 stringhe consideranndo anche le differenze di maiuscole e minuscole.
    Restituisce un intero minore di zero se stringa1 è minore di stringa2, oppure un intero maggiore di zero se stringa1 è maggiore di stringa2 e infine restituisce zero (0) se le due stringhe sono uguali.
$stringa1 = "ciao";
$stringa2 = "Zorro";

echo strcasecmp($stringa1, $stringa2); // stampa -23
echo strcmp($stringa1, $stringa2); // stampa 1
echo strcmp($stringa1, "ciao"); // stampa 0

In questo ultimo capitolo sulle stringhe, vedremo altri metodo aggiuntivi per gestirle.
La funzione "substr()" ci permette di estrarre delle sottostringhe dalla stringa specificata, specificando un indice di partenza.

echo substr("Roma Caput Mundi", 5); // stampa : "Caput Mundi"

echo substr("Roma Caput Mundi", 5, 5); // stampa : "Caput"

// Il terzo parametro indica la lunghezza della sottostringa ed è facoltativo

La funzione substr_count(), conta le occorrenze di una sottostringa nella stringa specificata.
str_replace() invece, ci permette di sostituire una parte di stringa con la sottostringa specificata.
Per ultima, strlen() che ci fornisce la lunghezza esatta della stringa specificata.
Vediamo alcuni esempi :

$stringa = "ciao ciao! ancora un ultimo saluto ... ciao";

echo str_replace("ciao", "bye", $stringa, $occorrenze); // stampa : bye bye! ancora un ultimo saluto ... bye
echo $occorrenze; //stampa : 3

echo substr_count($stringa, "ciao"); // stampa : 3

echo strlen("ciao"); // stampa : 4

Continuiamo con altre funzioni, che ci permettono di trasformare le stringhe in array e viceversa.
Sono "explode()" e "implode()" che prendono come primo parametro un separatore e per secondo una stringa (explode) o un array (implode) su cui lavorare :

$stringa = "mela;banana;anguria;melone;kiwi";

$frutti = explode(";", $stringa);

for ($i = 0; $i < count($frutti); $i++)
	echo $frutti[$i] . "<br />\n";

echo implode(" - ", $frutti);

L'esempio produce il seguente output.

Infine vediamo le funzioni per eseguire delle ricerche nelle stringhe.

  • strpos($stringa, $ricerca [, $partenza]) - Restituisce un intero corrispondente alla posizione della prima occorrenza della stringa $ricerca nella stringa $stringa, oppure false se non viene trovata.
    Il terzo parametro è facoltativo ed indica da quale posizione deve iniziare la ricerca.
  • strstr($stringa, $ricerca) - Trova la prima occorrenza della stringa $ricerca nella stringa $stringa, e restituisce la parte della stringa a partire dall'occorrenza di $ricerca.
  • stristr($stringa, $ricerca) - Versione di "strstr()" insensibile alle maiuscole/minuscole.
$stringa = "posta@realizzazione-sito.info";

echo strpos($stringa, "@"); // stampa : 5
echo strstr($stringa, "@"); // stampa : @realizzazione-sito.info