Może spróbuj jeszcze z wyszukiwaniem frazy przez strpos(). ?
Funkcja ta zwraca pozycję (indeks) pierwszego wystąpienia szukanej frazy w stringu lub wartość false, jeśli fraza nie została znaleziona.
Przykład kodu, który wyszukuje początkową i końcową pozycję frazy (liczby) w stringu:
$string = "[1] [25] [99] [2521]";
$positions = [];
$start = 0;
while (true) {
$start = strpos($string, "[", $start);
if ($start === false) {
break;
}
$end = strpos($string, "]", $start);
if ($end === false) {
break;
}
$positions[] = [$start, $end];
$start = $end + 1;
}
var_dump($positions); // zwraca [[0, 2], [6, 8], [12, 14], [18, 22]]
Natomiast jeśli chcesz to zrobić tak zeby znaleźć wszystkie wystąpienia frazy, możesz użyć pętli while i w niej wywoływać funkcję strpos() z argumentem $haystack ustawionym na pozycję o 1 większą niż pozycja końca ostatnio znalezionej frazy.
Pamiętaj też, żeby sprawdzić, czy fraza została znaleziona (funkcja strpos() zwraca wartość false jeśli frazy nie ma w stringu).
Np w ten sposób:
function find_all_phrases($string) {
$positions = array();
$start = 0;
while (($start = strpos($string, "[", $start)) !== false) {
$end = strpos($string, "]", $start);
if ($end === false) {
break;
}
$positions[] = array($start, $end);
$start = $end + 1;
}
return $positions;
}
print_r(find_all_phrases("[1] [25] [99] [2521]")); // zwraca Array ( [0] => Array ( [0] => 0 [1] => 2 ) [1] => Array ( [0] => 4 [1] => 6 ) [2] => Array ( [0] => 8 [1] =>