[PHP] – Cercare più occorrenze in una stringa

Mai capitato di dover filtrare una frase in base a più indici? Mi spiego meglio: volete sapere se in una stringa ci sono certe occorrenze. Potrebbe essercene una e due non esserci, potrebbero essercene tre su tre (come 10 su 10), o solo la metà.

L’evento si verifica se almeno una occorrenza è stata rilevata.

Come fare a controllare la cosa in modo efficiente? Basta un semplice ciclo foreach che sfarfalla un array di controllo.
Ipotizziamo di voler sapere se nella stringa inviataci via form ci sono parole non ammesse. Ci creiamo un array ad hoc e per ogni parola controlliamo la corrispondenza. Dopo di che se trovo almeno una corrispondenza devo settare una variabile ad un certo valore, altrimenti mantengo il default:

$arraycontrol = array(‘http’,'[url]’,’href’);

//Default
$mod = 1;

foreach($arraycontrol as $control){
if(preg_match(‘/’ . $control . ‘/’,$_POST[‘commento’])){
$mod = 0;
}else{
if($mod != 0){
$mod = 1;
}
}
}

Notate il ciclo if. Inizialmente è facile ed intuitivo: se trovo corrispondenza la variabile $mod diventa 0. Ma non dimentichiamoci che foreach mi crea un ciclo di istruzioni che in questo caso si ripetono per ogni elemento dell’array. Per cui se, se non setto una buona regola, rischio di controllare di fatto solo l’ultimo elemento dell’array, ed è quello che mi darà un risultato a prescindere dagli altri elementi.

Per questo in else impongo la condizione if($mod != 0). Perchè se il ciclo precedente ha trovato una occorrenza, allora non dovrò tornare al default, ed allo stesso modo se non trovo occorrenze in un ciclo successivo non devo rischiare di avere un valore NULL.

Sto usando la cosa per impostare una moderazione dinamica dei commenti in un applicazione e l’idea sembra funzionare degnamente : - )