Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tworzenie zmiennych w pętli
Forum PHP.pl > Forum > Przedszkole
pablomaruda
Cześć. Mam prostą wyszukiwarkę słów. W zależności od wybranej długości słowa skrypt generuje formularz o odpowiedniej liczbie pól. Z formularza przychodzą dane o długości słowa i literach, które szukane słowo ma zawierać.
Przykład dla słowa trzyliterowego:
  1. <form action="index.php" method="post">
  2. <input type="text" name="letter1" maxlength="1" value=".">
  3. <input type="text" name="letter2" maxlength="1" value=".">
  4. <input type="text" name="letter3" maxlength="1" value=".">
  5. <input type="hidden" name="iloscliter" value="3">
  6. <input type=submit name="szukaj" value="Szukaj">
  7. </form>

W skrypcie przetwarzającym formularz mam taki kod:
  1. $wordLength = $_POST['iloscliter'];
  2. $plik = file('hasla'.$wordLength.'.txt');
  3.  
  4. $letter1 = mb_strtoupper($_POST['letter1'],"UTF-8");
  5. $letter2 = mb_strtoupper($_POST['letter2'],"UTF-8");
  6. $letter3 = mb_strtoupper($_POST['letter3'],"UTF-8");
  7.  
  8. $wzorzec = '/^'.$letter1.$letter2.$letter3.'/';
  9.  
  10. for($i = 0, $x = count($plik); $i < $x; $i += 3)
  11. {
  12. if(preg_match($wzorzec, $plik[$i]))
  13. {
  14. echo $plik[$i]."<br />";
  15. }
  16. }

Tyle tylko, że to kod napisany z palca. Chciałbym jakoś wygenerować linie 4-8 w zależności od wartości $wordLength. Nie wiem jak to w pętli zapisać.
nospor
zamiast zmiennych na kazda litere, utworz tablice pol

<input type="text" name="letter[]" maxlength="1" value=".">
<input type="text" name="letter[]" maxlength="1" value=".">
<input type="text" name="letter[]" maxlength="1" value=".">

a potem

  1. $wzorzec = '/^'.mb_strtoupper(implode('', $_POST['letter']),"UTF-8")).'/';
pablomaruda
Cytat(nospor @ 27.05.2020, 13:10:14 ) *
zamiast zmiennych na kazda litere, utworz tablice pol

<input type="text" name="letter[]" maxlength="1" value=".">
<input type="text" name="letter[]" maxlength="1" value=".">
<input type="text" name="letter[]" maxlength="1" value=".">

a potem

  1. $wzorzec = '/^'.mb_strtoupper(implode('', $_POST['letter']),"UTF-8")).'/';


Zadziałało wyśmienicie! Bardzo dziękuję!

Ale przy okazji zauważyłem pewien problem ze zwracanymi wynikami:

wzorzec: /^R.Ż.M/
wyniki:
REŻIM 👍
REŻYM 👍

wzorzec: /^RE..I/
wynik:
RECKI
REINI
RENNI
REŻIM questionmark.gif

wzorzec: /^RE..M/
wyniki:
REBUM
REIZM
brak reżimu questionmark.gif

Czym może to być spowodowane? Może powinienem przekonstruować wyrażenie? Wszystkie pliki kodowane są w UTF-8.
nospor
ż to 2 znaki temu nie wpadaja ci pod kropke a pod dwie.

Sprobuj modyfikator "u"
https://www.php.net/manual/en/reference.pcr...n.modifiers.php
pablomaruda
Cytat(nospor @ 27.05.2020, 15:11:10 ) *
ż to 2 znaki temu nie wpadaja ci pod kropke a pod dwie.

Sprobuj modyfikator "u"
https://www.php.net/manual/en/reference.pcr...n.modifiers.php


Działa! Jestem Ci ogromnie wdzięczny za skuteczną i błyskawiczną pomoc!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.