Problem z funkcją + in_array() |
Problem z funkcją + in_array() |
19.04.2015, 00:08:18
Post
#1
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 16.03.2015 Ostrzeżenie: (0%) |
Witam.
Przesiedziałem chyba godzinę nad znalezieniem problemu. Bezskutecznie. Idąc w myśl powiedzenia "co dwie głowy to nie jedna", zamieszczam kod pewnej funkcji:
Funkcja na wejściu otrzymuje wartość pola tekstowego. Plik dictionary.txt jest zwykłym plikiem tekstowym. Sam plik odczytywany jest poprawnie. Problem leży przy zmiennej $eString, która zwyczajnie, wg interpretera, sobie nie istnieje. Nie potrafię znaleźć powodu. Z góry bardzo dziękuję za pomoc |
|
|
19.04.2015, 00:25:35
Post
#2
|
|
Grupa: Zarejestrowani Postów: 273 Pomógł: 52 Dołączył: 3.02.2013 Skąd: Przemyśl Ostrzeżenie: (0%) |
Na pierwszy rzut oka, linijka 14 - używasz zmiennej $nx, która nie istnieje.
Dodatkowo proponowałbym zadeklarować sobie zmienną $eString wcześniej jako np. pusta tablica. Zwracasz ją w wyniku funkcji, a nie zawsze będzie ona wypełniania (musi być spełniony konkretny warunek) Dzięki temu, funkcja zwróci ci pustą tablicę zamiast NULL + notice w przypadku gdy nie dojdzie do jej wypełniania. Ten post edytował mstraczkowski 19.04.2015, 00:35:08 -------------------- Jeżeli moja wypowiedź Ci pomogła użyj przycisku
|
|
|
19.04.2015, 00:36:13
Post
#3
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 16.03.2015 Ostrzeżenie: (0%) |
Rzeczywiście. Przeoczyłem ten szczegół. Jest to pozostałość po poprzedniej pętli. Generalnie wcześniej wyglądało to tak:
I to też nie działało. Potem zajżałem do dokumentacji i znalazłem funkcję in_array(). Ps. Pisałem teraz z pamięci, ale wydaje mi się, że jest dobrze. |
|
|
19.04.2015, 00:54:34
Post
#4
|
|
Grupa: Zarejestrowani Postów: 273 Pomógł: 52 Dołączył: 3.02.2013 Skąd: Przemyśl Ostrzeżenie: (0%) |
Na tyle na ile mogę zrozumieć cel działania tej funkcji, to wydaje mi się, że posiadasz błędne dane w pliku tekstowym.
Albo odczytujesz je w nieprawidłowy sposób (może za mało lub za dużo spacji w explode) Gdy utworzyłem sobie skróconą wersję twojej funkcji z danymi na sztywno w tablicy (bez czytania z pliku) To wydaje mi się, że otrzymywany wynik jest prawidłowy. I jeszcze jedna uwaga, funkcja in_array odróżnia wielkość liter (to znaczy, że np Mam != mam)
Ten post edytował mstraczkowski 19.04.2015, 01:03:46 -------------------- Jeżeli moja wypowiedź Ci pomogła użyj przycisku
|
|
|
19.04.2015, 10:11:40
Post
#5
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 16.03.2015 Ostrzeżenie: (0%) |
Funkcja file() wczytuje plik do tablicy.
Dane w pliku wyglądają tak : Wartość1<tab>wartość2<koniec linii> I tak prawie 300 linii. Wszystko powinno być dobrze w tym pliku, ale jeszcze się upewnię. Rozumiem, że jeśli chcę ignorować wielkość znaków, to muszę zastosować swoją podwójną pętlę? Czy jest jakaś inna funkcja do tego? Jeszcze tak wpadło mi do głowy... Z tego co się orientuję, PHP posiada chyba jakieś funkcje do plików CSV. Jeśli tak, to może potraktować ten plik takimi funkcjami? |
|
|
19.04.2015, 10:26:54
Post
#6
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) |
Spróbuj taką zmianę przy wczytywaniu pliku słownika:
Przy przyrównywaniu wyrazów można w nich zmienić wszystkie literki na małe za pomocą strtolower. Jeszcze jedna wskazówka, by zoptymalizować trochę skrypt, a mianowicie, taki zapis powoduje liczenie wielkości tablicy $dictionary przy każdej iteracji. Nie ma to sensu, bo jej wielkość się nie zmienia. Można to zastąpić tym: Ten post edytował kreatiff 19.04.2015, 10:45:47 |
|
|
19.04.2015, 12:24:18
Post
#7
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 16.03.2015 Ostrzeżenie: (0%) |
kreatiff -> niestety nie działa :/ Optymalizację zastosowałem i zapamiętam na przyszłość. Dzięki za wskazówkę
Dla pewności zamieszczam poniżej fragment pliku tekstowego:
Dla całkowitej pewności zamieszczam cały plik PHP:
|
|
|
19.04.2015, 12:37:57
Post
#8
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) |
W kodzie powyżej jest coś namieszane z deklarowaniem $x w pętlach. Jest to robione podwójnie.
Poniżej jak ja bym to zrobił, może coś z tego się przyda: Ogólnie jest to bardzo niedoskonałe, ale z prostym zamienianiem wyrazów sobie poradzi. Ten post edytował kreatiff 19.04.2015, 12:46:33 |
|
|
19.04.2015, 21:07:45
Post
#9
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 16.03.2015 Ostrzeżenie: (0%) |
No właśnie...
Dawno nie robiłem w PHP i w ogóle zapomniałem o istnieniu foreach... Zaraz sprawdzę, Twoją propozycję. Dzięki wielkie No proszę. Działa Co prawda trzeba jeszcze wprowadzić parę poprawek, głównie to, aby ignorował wielkość liter + kilka innych, ale z tym powinienem sobie poradzić. Mimo wszystko nadal mnie zastanawia czemu mój pierwotny skrypt nie działał. Na logikę raczej powinien... dziwne to. Dzięki wszystkim za pomoc |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 05:59 |