Skocz do zawartości

Funkcja while i sprawdzanie powtorzen


alexx-1

Rekomendowane odpowiedzi

Tak jak w temacie, mam problem z funkcją while, chciałbym zrobić w skrypcie dodawarke nazw graczy, ale nie chcę aby nazwy się powtarzały. Zrobiłem taki kod:

	$x = 1;
while($x <= count($gamertag) && $_POST['nazwagracza'] != $gamertag[$x]){
 $gamertagg = file_get_contents('bazagt.txt');
 $gamertaggg = $_POST['nazwagracza'] . "\n" . $gamertagg;

 file_put_contents('bazagt.txt', $gamertaggg[$ig] );
 $x++;
}
$xx = 1;
while($xx <= count($gamertag) && $_POST['nazwagracza'] == $gamertag[$xx]){
 echo '<center>Nie poprawny gamertag lub za mały gamescore!</center>';
 $xx++;
}

Jakby ktoś byłby taki miły, niech napisze w którym miejscu źle kombinuje...

Portal PS Vita | Forum

Vitasitepl.gif

Odnośnik do komentarza
Udostępnij na innych stronach

1. Pętla for, nie while

for próbowałem, ale gdy nazwa gracza nie jest w bazie, to dodaje mi się tyle nazw, ile forka przeleci, nie wiem jak zrobić, żeby tylko w if'ie robila pętelki

2. Jak duża ta baza? Można użyć np. array_unique :)

teraz jest mała, ale z czasem w array;ce będzie przynajmniej 100 elementów (jeszcze mam w planach jeden skrypt zrobić, ale tam by musiało być z 10k, ale nie wiem czy baze danych do tego nie lepiej zrobic)

co do samego array_unique, to wiele mi to nie da, po prostu jak ktos będzie dodawał swoją nazwę, to musi sprawdzać czy taka już jest, a jak jest to info się o tym pokazuje

3. Czemu w pętli ciągle odczytujesz to samo ?

nie rozumiem?

Portal PS Vita | Forum

Vitasitepl.gif

Odnośnik do komentarza
Udostępnij na innych stronach

Do "przechodzenia" przez dane tablicowe w PHP masz specjalną funkcję https://php.net/manual/en/control-structures.foreach.php

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

@Taka uwaga ode mnie nigdy nie wstawiaj odczytu pliku (lub zapytania do bazy) w pętlę!

Uzasadnij swoją uwagę, a w zasadzie wyjaśnij najlepiej na przykładzie co masz na myśli ;)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Masz pętlę która wykonuje się 1000 razy, jeśli wstawisz w nią odczyt pliku / zapytanie do bazy, to będzie się to wykonywać z każdą iteracją, czyli będziesz miał 1000 x odczyt tego samego pliku (obciążenie serwera) lub 1000 x to samo zapytanie do bazy (jeśli jedno zapytanie wykonuje się 0.1s to masz 100s zmarnotrawione). Taki źle napisany kod zwalnia działanie całej strony i niepotrzebnie obciąża serwer. O ile na początku możesz tego nie zauważyć, bo np. w bazie masz 10 rekordów i pętla się wykonuje 10 razy, to z czasem jak danych przybywa to skrypt działa coraz wolniej, dlatego warto wyrabiać sobie pewne nawyki.

Odnośnik do komentarza
Udostępnij na innych stronach

@Masz pętlę która wykonuje się 1000 razy, jeśli wstawisz w nią odczyt pliku / zapytanie do bazy, to będzie się to wykonywać z każdą iteracją

W kontekście tego topiku to nonsens - żeby wykonać iteracje musisz mieć uchwyt do wyników na którym będziesz iterować, więc tak jak piszesz iteracja by się wykonywała w nieskończoność, bo za każdym pobraniem wskaźnik dla zbioru wyników przesuwał by się na sam początek.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

odniosłem się do fragmentu kodu w pierwszym wpisie tego tematu, gdzie kolega w pętli odczytuje ciągle ten sam plik, chociaż po przyjrzeniu się teraz uważniej to ten kod jest totalnie bez sensu. a co do Twojego stwierdzenia o iteracji w nieskończoność zależy jak zrobisz pętelkę, np. foreach tworzy sobie kopię tablicy którą iteruje, w pętli możesz ją zmieniać dowolnie tę tablicę a i tak nic to nie zmieni. myślę, że nie ma co ciągnąć tego tematu, autor tematu ma jeszcze długą drogę ku chwale

Odnośnik do komentarza
Udostępnij na innych stronach

Mion - b4m ma rację:

$gamertagg = file_get_contents('bazagt.txt');

Po co za każdym przejściem pętli odczytywać plik? Co prawda jest cache I/O systemu operacyjnego ale to nadal niepotrzebne, szczególnie, że nie widzę nigdzie wykorzystania zmiennej "$gamertagg".

"for próbowałem, ale gdy nazwa gracza nie jest w bazie, to dodaje mi się tyle nazw, ile forka przeleci, nie wiem jak zrobić, żeby tylko w if'ie robila pętelki"

Prawdopodobnie chodzi Ci o Polecenie "continue".

Po za tym jeżeli gracze mają jakieś unikalne identyfikatory liczbowe to jeżeli to możliwe to lepiej (szybciej) porównywać liczby niż nazwy (stringi).

Odnośnik do komentarza
Udostępnij na innych stronach

Mion - b4m ma rację:

$gamertagg = file_get_contents('bazagt.txt');

Po co za każdym przejściem pętli odczytywać plik? Co prawda jest cache I/O systemu operacyjnego ale to nadal niepotrzebne,

Oczywiście, że w tym kontekście ma racje Niestety :D w ogóle nie zwróciłem uwagi na ten pierwotny kod i miałem na myśli coś innego, ale to już nie istotne.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności