Mam problem z pewną rzeczą, którą chcę zamieścić na stronie. Jeśli ktoś zna PHP na poziomie dobrym albo lepiej, to proszę o odp.
Opisz pokrótce problem. Można znać PHP, ale problem może dotyczyć np. jakiejś funkcji wordpressowej, gdzie bez znajomości działania 10 innych nie będzie łatwo udzielić odpowiedzi.
Chciałbym napisać funkcję zliczającą powtórzenia pod rząd w jakimś słowie. Np. Aagata, czyli 2x jest litera A powtórzona pod rząd, więc zwraca odpowiednią liczbę itd.
Nie rozumiem co oznacza "odpowiednia liczba", czyli to co ma zwracać funkcja.
Schemat postępowania, jaki ja bym zastosował: rozbijasz stringa na literki (str_split) i w pętli sprawdzasz każdą kolejną literę, czy zgadza się z poprzednią. Jeśli tak, licznik wzrasta o jeden, czy ile tam jest potrzebne.
Nawet bez splita mozna, wystarczy po kolei odwolywac sie do kolejnych liter w stringu.
Dla naszych krzaczków zaczyna się problem przy odwołaniu do konkretnego bajtu.
Jak znasz algorytmy, to bez problemu takie coś w każdym języku napiszesz.
odpowiednia oznacza ilość powtórzeń, czyli w Aagata będzie zwrócona 1 jest powtórzenie dwóch liter a. W nazwie np. Googlee będzie wypisana dwójka, bo są dwa powtórzenia : 2x o i 2x e
nie, on zlicza tylko po 2 litery sąsiadujące, jeśli są takie same, to wyświetla 1.
Aagata - 1
Aagaataa - 3
Ktootaam - 2
Jeśli dwie litery takie same są obok siebie, daje to wart. 1.
nie, chodzi o typ , że są dwa obok siebie, wielkość mnie nie interesuje
dla Aaagata - 1, tu chodzi raczej o takie coś, że wystarczą 2 koło siebie, nawet dla Aaaaaaagata też policzy 1 bo w 1 miejscu te powtórzenia są.
http://sandbox.onlinephpfunctions.com/code/287f44b84c2488b31bde0d3996df71e6d86c7ce7
baaaaaaardzo "łopatologicznie", na pewno jest jakieś lepsze roziązanie... np preg_match?
$a = 'Aaagaataaa';
preg_match_all('#(.)\1+#ui', $a, $m);
echo count($m[0]);
wyrażenia regularne to cholernie fajna sprawa, dla 3 lub więcej
$a = 'Aaagaataaa';
preg_match_all('#(.)\1\1+#ui', $a, $m);
echo count($m[0]);
może być też (.)\12\1*
w ;;;; licznik powtórzeń złapanego w (.) znaku
edit: rzeczywiście jak napisał kolega niżej - (.)\12,
Nie znam php.
Przepisz z javy i (jedyne co to musisz wiedzieć jak zaglądać do wnętrza stringu w PHP) i powinno banglać.
edit: jak chcesz 3 pod rząd to ucinasz pętlę jeszcze bardziej (length -2) i dodajesz && tekst(i) == tekst(i+2) w ifie.
Regex dla x powtórzeń
/(.)\1x,/.