Bruce666 utworzono 14 grudnia 2018 utworzono 14 grudnia 2018 Witam, Mam do zrobienia pewien projekt i jedna rzecz mnie w nim blokuje. Problem wygląda następująco: Są dwie tablice znaków: Pierwsza - tekst wprowadzony przez użytkownika i przy użyciu str_split przekształcony w tablicę Druga - alfabet złożony z małych i dużych liter przekształcony w tablicę przy użyciu str_split. Fragment kodu wygląda następująco: $tekst = $_POST['Caesar']; var_dump($tekst); $znaki = str_split($tekst); var_dump($znaki); $alfabet = ('AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuWwVvXxYyZz'); $alfarray = str_split($alfabet); Problem polega na tym, żeby znaleźć indeksy znaków w tablicy alfabet, przykładowo: $tekst = 'Jan Kowalski' zmienione na tablicę będzie wyglądać tak: [0] 'J' ; [1] 'a'; [2] 'n'; [3] ' '; [4] 'K'; itd... Chodzi o to, by skrypt wykrył, że duża litera 'J' ma w tablicy $alfarray indeks bodajże 18, 'a' ma indeks '1' (pierwszy znak ma indeks 0), itd. Próbowałem rozwiązać to przez dwie pętle for i w nich while, ale nie umiem ustawić warunku, który by to weryfikował. Cały program to szyfr cezara, a powyższy problem jest barierą, która nie pozwala mi go rozwiązać... Pomoże ktoś?
dmonix komentarz 14 grudnia 2018 komentarz 14 grudnia 2018 (edytowane) rozsądne wydaje się zrobienie tablicy asocjacyjnej czyli $alfArray = [ 'A' => 0, 'a' => 1, itd itd ]; a później $szyfr = []; foreach ($tekst as $t) { $szyfr[] = $alfArray[$t]; } tylko wiem pisania z palca tej pierwszej tablicy. albo drugi sposób to robisz foreacha po tej tablicy która ma być zaszyfrowana i dla każdej wartości piszesz funkcje która sprawdza pozycję danej literki function getIndex($char, $array) { foreach ($array as $index => $value) { if ($value == $char) { return $index; } } return -1; //brak znaku w tablicy } $szyfr = []; foreach ($text as $t) { $szyfr[] = getIndex($t, $alfArray); } wszystko pisałem z głowy więc może gdzieś być błąd, podałem pomysły jak możesz to zrobić.
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.