Beh, perchè sbagli a programmare. Fondamentalmente l'approccio utilizzato è sbagliatissimo (risolvere un problema composito utilizzando un blocco unico di codice).
Per risolvere ti basta una funzione che dato un tag e il testo conta quante volte è presente il tag in quel testo (cioè conta le occorrenze di una parola in un testo, non so se esiste una funzione in php che implementa già la cosa, forse si)
Comunque basta questo.
Codice PHP:
function count_t($tag, $text) {
$count = 0;
for($i=0;$i<=strlen($text) - strlen($tag);$i++) {
$s = substr($text, $i, strlen($tag));
if($s == $tag)
$count++;
}
return $count;
}
Il resto viene da se...
Codice PHP:
$tag = array(
"[b];[/b]" => 0,
"[i];[/i]" => 0
/* tag_aperto;tag_chiuso */
);
foreach($tag as $t => $q) {
$g = explode(";", $t);
$tag[$t] = count_t($g[0], $my_text) - count_t($g[1], $my_text);
}
foreach($tag as $t => $q) {
$g = explode(";", $t);
if($q >= 1)
echo "Tag $g[0] non chiuso\n";
}
Ora, il secondo ciclo è fondamentalmente inutile, io l'ho fatto soltanto per farti vedere l'esempio, ti basta il confronto fatto sul primo for senza ripetere l'operazione, cioè
Codice PHP:
$tag = array(
"[b];[/b]",
"[i];[/i]"
/* tag_aperto;tag_chiuso */
);
foreach($tag as $t => $q) {
$g = explode(";", $t);
if((count_t($g[0], $my_text) - count_t($g[1], $my_text)) >= 1)
echo "Il tag $g[0] non è stato chiuso";
}
Per il resto la sottrazione ti dice 'quante volte' non è stato chiuso, e, quindi, quante volte stampare $g[1] in coda al testo. $my_text è il testo che hai tu.
Dovrebbe funzionare, non l'ho provato, però è banale.