Stringhe in PHP

Stringhe

Output formattato: printf

Segnaposto Tipo
%c carattere
%d numero intero
%f numero float
%s stringa
<?php
$nome  = "Simone";
$eta   = 15;
$media = 6.3;
printf("%s ha %d anni; media voti: %5.2f <br>", $nome, $eta, $media);
// Simone ha 15 anni; media voti:  6.30
?>

%5.2f: almeno 5 caratteri in totale, di cui 2 decimali.

La stringa come array di caratteri

Si può accedere al singolo carattere con la notazione $stringa[$i]:

<?php
// stampare solo il risultato della partita
$a = "Novara-Vercelli 1-0";
$sw_stampa = 0;
for ($i = 0; $i < strlen($a); $i++)
{
    if ($a[$i] == " ")
        $sw_stampa = 1;
    if ($sw_stampa == 1)
        print "$a[$i]";       //  1-0
}

// confronto tra stringhe con ==
$password_1 = "master";
$password_2 = "masterd";
if ($password_1 == $password_2)
    print("Password uguali");
else
    print("Password diverse");
?>

Funzioni principali sulle stringhe

Funzione Descrizione
strlen($s) lunghezza
str_word_count($s) numero di parole
strpos($s, $cerca) posizione della prima occorrenza
str_replace($da, $a, $s) sostituisce tutte le occorrenze
substr($s, $inizio, $lung) estrae una sottostringa
substr_count($s, $cerca) numero di occorrenze
Funzione Descrizione
strtolower($s) converte in minuscolo
strtoupper($s) converte in maiuscolo
chr($n) carattere corrispondente al codice ASCII
ord($c) codice ASCII del carattere
implode($arr) unisce gli elementi di un array in una stringa
Funzione Descrizione
trim($s) rimuove gli spazi a inizio e fine stringa
ltrim($s) rimuove gli spazi a sinistra (inizio)
rtrim($s) rimuove gli spazi a destra (fine)
explode($sep, $s) divide una stringa in un array
implode($sep, $arr) unisce un array in una stringa con separatore

Esempi

<?php
echo strlen("Hello world!");                  // 12
echo str_word_count("Hello world!");          // 2
echo strpos("Hello world!", "lo");            // 3
echo str_replace("Bo", "He", "Bollo world!"); // Hello world!

echo chr(80) . chr(73) . chr(80) . chr(80) . chr(79);  // PIPPO
echo ord("P");                                // 80

echo strtolower("Pippo");                     // pippo
echo strtoupper("Pippo");                     // PIPPO

echo substr("mrwebmaster", 1);                // rwebmaster
echo substr("mrwebmaster", 1, 4);             // rweb
echo substr("mrwebmaster", 0, 7);             // mrwebma

echo substr_count("Oggi e' una bella giornata primaverile", "gi"); // 2

$arr = array("Gian", "Luca");
echo implode($arr);                           // GianLuca
?>

Rimozione degli spazi: trim, ltrim, rtrim

  • I dati inseriti dall'utente (es. in un form) contengono spesso spazi indesiderati
  • trim($s) rimuove gli spazi bianchi all'inizio e alla fine della stringa
  • ltrim($s) solo a sinistra (inizio), rtrim($s) solo a destra (fine)
  • Gli spazi interni non vengono mai toccati
  • Oltre allo spazio vengono rimossi anche \t (tab), \n (a capo), \r, \0 e \v
<?php
$s = "   Ciao mondo   ";

// le parentesi quadre servono a "vedere" gli spazi
echo "[" . $s . "]";          // [   Ciao mondo   ]
echo "[" . trim($s) . "]";    // [Ciao mondo]
echo "[" . ltrim($s) . "]";   // [Ciao mondo   ]
echo "[" . rtrim($s) . "]";   // [   Ciao mondo]

echo strlen($s);              // 16
echo strlen(trim($s));        // 10

// secondo parametro (facoltativo): caratteri da rimuovere
echo trim("***Attenzione!***", "*");   // Attenzione!
echo rtrim("1, 2, 3, ", ", ");         // 1, 2, 3
?>

Estrarre una sottostringa: substr()

substr($s, $inizio, $lunghezza)

  • $inizio: posizione del primo carattere (si parte da 0)
  • $lunghezza (facoltativo): quanti caratteri estrarre; se omesso si arriva fino alla fine
  • $inizio negativo: si conta dalla fine della stringa
  • $lunghezza negativa: si escludono altrettanti caratteri dalla fine
<?php
$s = "Informatica";
// posizioni: I=0, n=1, f=2, o=3, ... a=10

echo substr($s, 0, 2);     // In
echo substr($s, 2);        // formatica
echo substr($s, 2, 5);     // forma
echo substr($s, -4);       // tica  (ultimi 4 caratteri)
echo substr($s, -4, 2);    // ti
echo substr($s, 0, -5);    // Inform (tutto tranne gli ultimi 5)

// primo carattere maiuscolo, il resto minuscolo
$nome = "mARIO";
echo strtoupper(substr($nome, 0, 1)) . strtolower(substr($nome, 1)); // Mario

// estensione di un file: dal punto in poi
$file = "relazione.pdf";
echo substr($file, strpos($file, ".") + 1);   // pdf
?>

Sostituire testo: str_replace()

str_replace($cerca, $sostituisci, $s)

  • Restituisce una nuova stringa: l'originale non viene modificata
  • Sostituisce tutte le occorrenze, non solo la prima
  • Distingue tra maiuscole e minuscole (str_ireplace() invece no)
  • $cerca e $sostituisci possono essere anche array
  • Un quarto parametro (facoltativo) restituisce il numero di sostituzioni effettuate
<?php
$s = "Il gatto mangia. Il gatto dorme.";

echo str_replace("gatto", "cane", $s);
// Il cane mangia. Il cane dorme.

echo str_replace("GATTO", "cane", $s);    // nessuna sostituzione
echo str_ireplace("GATTO", "cane", $s);   // Il cane mangia. Il cane dorme.

// rimuovere un carattere: lo sostituisco con la stringa vuota
echo str_replace(" ", "", "3 4 5 - 1 2");  // 345-12

// sostituzioni multiple con array
$vocali = array("a", "e", "i", "o", "u");
echo str_replace($vocali, "*", "programmazione");  // pr*gr*mm*z**n*

// numero di sostituzioni
str_replace("a", "A", "banana", $quante);
echo $quante;                              // 3
?>

Da stringa ad array e ritorno: explode() e implode()

  • explode($separatore, $s): divide la stringa ogni volta che incontra il separatore e restituisce un array
  • implode($separatore, $array): operazione inversa, unisce gli elementi dell'array inserendo il separatore tra uno e l'altro
  • Se il separatore di implode è omesso, gli elementi vengono uniti senza nulla in mezzo
  • Molto utili per elaborare dati come CSV (Rossi;Mario;15), elenchi di parole, date (08/10/2026)
<?php
$frutta = "mela,pera,banana";
$arr = explode(",", $frutta);
// $arr[0] = "mela", $arr[1] = "pera", $arr[2] = "banana"

echo count($arr);              // 3
echo $arr[1];                  // pera

echo implode(" - ", $arr);     // mela - pera - banana
echo implode($arr);            // melaperabanana

// terzo parametro: numero massimo di elementi
$parti = explode(",", $frutta, 2);
// $parti[0] = "mela", $parti[1] = "pera,banana"

// dividere una frase in parole
$parole = explode(" ", "Oggi studiamo PHP");
foreach ($parole as $p)
    echo $p . "<br>";
?>

Esempio: elaborare una riga CSV

explode e trim si usano spesso insieme per "ripulire" i dati:

<?php
$riga = " Rossi ; Mario ; 15 ; 7.5 ";

$campi = explode(";", $riga);
for ($i = 0; $i < count($campi); $i++)
    $campi[$i] = trim($campi[$i]);

printf("%s %s ha %d anni; media: %.1f <br>",
       $campi[1], $campi[0], $campi[2], $campi[3]);
// Mario Rossi ha 15 anni; media: 7.5

// data dal formato gg/mm/aaaa al formato aaaa-mm-gg
$data = "08/10/2026";
$p = explode("/", $data);
echo implode("-", array($p[2], $p[1], $p[0]));   // 2026-10-08
?>

Esercizio: maiuscolo senza strtoupper

  • Nella tabella ASCII le lettere minuscole distano 32 posizioni dalle maiuscole
  • "A" → 65, "a" → 97
  • Quindi: chr(ord("a") - 32) → chr(65) → "A"
<?php
$frase = "Pippo";
$lungh_frase = strlen($frase);

for ($i = 0; $i < $lungh_frase; $i++)
{
    if ($frase[$i] >= "a" && $frase[$i] <= "z")
        $nuovafrase[$i] = chr(ord($frase[$i]) - 32);
    else
        $nuovafrase[$i] = $frase[$i];
}

// print $nuovafrase;  → "Array to string conversion"
// implode unisce gli elementi dell'array in una stringa
print "Nuova frase: " . implode($nuovafrase);   // PIPPO
?>