strripos()
La funzione strripos() in PHP trova l'ultima occorrenza di una sottostringa senza distinzione tra maiuscole e minuscole all'interno di una stringa.
Introduzione
La funzione strripos() in PHP trova la posizione dell'ultima occorrenza di una sottostringa all'interno di un'altra stringa, ignorando le maiuscole e le minuscole. Il nome si decodifica come str (stringa) + r (reverse, ovvero ricerca da destra) + i (case-insensitive) + pos (posizione).
È il gemello case-insensitive di strrpos(): strripos("Hello", "L") e strripos("Hello", "l") restituiscono entrambi la stessa posizione, mentre strrpos() tratterebbe L e l come caratteri diversi.
Questo capitolo tratta la sintassi, il valore restituito (e il trabocchetto con false da gestire con attenzione), il parametro opzionale $offset — inclusi gli offset negativi — e come strripos() si relaziona alle altre funzioni di ricerca nelle stringhe.
Sintassi
strripos(string $haystack, string $needle, int $offset = 0): int|false| Parametro | Descrizione |
|---|---|
$haystack | La stringa in cui cercare. |
$needle | La sottostringa da cercare. |
$offset | Opzionale. Da dove iniziare la ricerca. Un valore positivo salta i primi $offset caratteri; un valore negativo interrompe la ricerca quel numero di caratteri prima della fine della stringa. Il valore predefinito è 0. |
Valore restituito: l'indice a base zero dell'ultima occorrenza corrispondente, oppure false se $needle non viene trovato.
Confrontare sempre con !==
strripos() restituisce 0 quando la corrispondenza si trova all'inizio della stringa, e 0 è falsy in PHP. Un controllo debole come if (strripos(...)) tratterebbe erroneamente una corrispondenza in posizione zero come "non trovato". Confronta sempre con false usando l'operatore stretto !==:
<?php
$haystack = "Apple pie";
$pos = strripos($haystack, "a"); // matches "A" at index 0
if ($pos !== false) {
echo "Found at index $pos"; // Found at index 0
} else {
echo "Not found";
}Esempio di base
In Hello World ci sono due caratteri o/O — uno in Hello (indice 4) e uno in World (indice 7). Poiché strripos() riporta l'ultima corrispondenza, l'output è:
Found last occurrence of 'o' in 'Hello World' at position 7Corrispondenza case-insensitive
La ricerca tratta le lettere maiuscole e minuscole come uguali, quindi la capitalizzazione di $needle non ha importanza:
<?php
$string = "Hello World, hello PHP";
echo strripos($string, "hello"), "\n"; // 13 — matches "hello" in "hello PHP"
echo strripos($string, "HELLO"), "\n"; // 13 — same match, case ignoredL'ultimo hello/HELLO/Hello nella stringa inizia all'indice 13, indipendentemente da come si scrive il needle.
Utilizzo del parametro $offset
Un offset positivo inizia la ricerca dopo i primi $offset caratteri:
<?php
$string = "Hello World";
echo strripos($string, "o", 5), "\n"; // 7 — only the "o" in "World" is consideredUn offset negativo fa terminare la ricerca quel numero di caratteri prima della fine della stringa, utile per trovare l'ultima corrispondenza in tutto eccetto una parte finale:
<?php
$string = "abcabc";
echo strripos($string, "b", -2), "\n"; // 4 — last "b" within the truncated search windowFunzioni correlate
Scegli la funzione di ricerca giusta per il lavoro:
strrpos()— comestrripos()ma case-sensitive.stripos()— trova la prima occorrenza case-insensitive.strpos()— trova la prima occorrenza case-sensitive.strstr()— restituisce il resto della stringa a partire dalla prima corrispondenza, anziché una posizione.substr()— estrae una parte della stringa una volta nota la posizione.
| Funzione | Direzione | Case-sensitive? |
|---|---|---|
strpos() | prima corrispondenza | sì |
stripos() | prima corrispondenza | no |
strrpos() | ultima corrispondenza | sì |
strripos() | ultima corrispondenza | no |
Conclusione
strripos() individua l'ultima occorrenza case-insensitive di una sottostringa e ne restituisce l'indice, oppure false quando non viene trovata alcuna corrispondenza. Ricorda di testare il risultato con !== affinché una corrispondenza in posizione zero non venga scambiata per un fallimento, e utilizza $offset (positivo o negativo) quando hai bisogno di limitare la finestra di ricerca. Quando hai bisogno della prima corrispondenza, o quando la distinzione tra maiuscole e minuscole è importante, usa una delle funzioni correlate indicate sopra.