Piero V.

Strrpos

Per velocizzare la nuova versione di rewriteurls, volevo fare uso della funzione strrpos di PHP.

Tra l’altro non pensavo esistesse la funzione che facesse al caso mio, invece eccola là 😊 .

Tuttavia la tega arriva comunque: su PHP 4 il valore ricercato deve essere una stringa di 1 carattere che poi è trasformata in numero, quello del carattere.

Invece in PHP 5 tutto ok.

Non è la prima volta che mi trovo di fronte a una scelta simile, ma visto che sto lavorando per Flatpress ho preferito tenermi compatibile con PHP 4, così ho fatto una funzione che potesse avere lo stesso esito, ed eccola qua.

Anche gli offset negativi sono supportati 😁 .

function strrpos_hack($haystack, $needle, $offset=0) {
	if(version_compare(PHP_VERSION, '5.0.0', '<')) {
		# PHP 4
		$oldpos=false;
		$len=strlen($needle);
		if($offset<0) {
			$haystack=substr($haystack, 0, $offset);
			$offset=0;
		}
		$off=$offset;
		while(($pos=strpos($haystack, $needle, $off))!==false) {
			$off=$pos+$len;
			$oldpos=$pos;
		}
		return $oldpos;
	} else {
		return strrpos($haystack, $needle, $offset);
	}
}

La prima cosa che fa è controllare se è PHP 5, tuttavia all’inizio io che non dispongo di un PHP4 (troppe noie ad attivarlo su Altervista), così risparmia un bel po’ di lavoro a noi.

Quindi se è PHP 4 dichiara un po’ di variabili e controlla se l’offset è negativo.

Se lo è, è come se fosse una stringa più corta, così taglia $haystack con substr (guardate il manuale PHP per ulteriori dettagli.

Poi con un while calcola la posizione con strpos fino a quando non c’è più la stringa desiderata, incrementando $offset di $pos+$len (la lunghezza della stringa).

Inoltre fa il backup dell’ultimo $pos perché se diventa falso non ne vale la pena fare il tutto 😊

Allora, quando $pos diventa false, ritorna il backup dell’ultimo pos, anche se la stringa non c’è proprio perché è stato dichiarato a false.

Spero di non aver commesso errori e che vi sia di gradimento!

La funzione è rilasciata in pubblico dominio, potete farne quello che vi pare.