Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z explode
Forum PHP.pl > Forum > Przedszkole
Oklejek
Witam, mam taki kod:
Plik users.ini:
  1. "nick" "haslo" "sqrnp" "a"

  1. $tablica = file(users.ini);
  2. for ($i=0; $i<count($tablica); $i++)
  3. {
  4. $tekst = preg_replace('/"/', '[;spacja]', $tablica[$i]);
  5. $t = explode('[;spacja]',$tekst);
  6. $nick = $t[1];
  7. $haslo = $t[3];
  8. $flagidostepu = $t[5];
  9. $flagikonta = $t[7];
  10. $nowe = '"'.$nick.'" "'.$haslo.'" "'.$flagidostepu.$_POST['klasa'].'" "'.$flagikonta.'"';
  11. if($nick == $nick2) $linia = $i;
  12. }

Wyrzuca mi błędy:
Notice: Undefined offset: 1 in C:\xampp\htdocs\sklep\config2.php on line 795

Notice: Undefined offset: 3 in C:\xampp\htdocs\sklep\config2.php on line 796

Notice: Undefined offset: 5 in C:\xampp\htdocs\sklep\config2.php on line 797

Notice: Undefined offset: 7 in C:\xampp\htdocs\sklep\config2.php on line 798
CTRL
Jaki kod jest w tych liniach które XAMPP pokazuje jako winne?
zacznij od 'users.ini'
Nie jestem też pewien czy file() zwróci tablicę...
Jeśli już nie możesz użyć bazy danych to obczaj YAML (dla php jest bibilioteka Spyc)
bostaf
W tablicy $t nie ma indeksów 1, 3, 5, i 7, do których odwołujesz się w liniach 795, 796, 797 i 798 w pliku sklep/config2.php.
Oklejek
To jakim cudem przypisuje do zmiennych $nick, $haslo itd. dane?
795 linia to 6 tego kodu i odpowiednio następne...
b4rt3kk
Być może niektórym przypisuje, a niektórym nie, upewnij się czy aby na pewno każdy obrót pętli zwraca zamierzone wartości.
tr!ckle
Poza tym nie lepiej zamiast preg_replace zrobić coś takiego?:

  1. //w petli
  2. $tekst = trim($tablica[$i], '"');
  3. $t = explode('" "', $tekst);


IMO szybciej i czytelniej (nie trzeba indeksować co druga wartość).
Poza tym w tym przypadku jeśli już upierasz sie przy replace, to użyj str_replace. Nie potrzebujesz używać wolniejszego preg_replace aby podmienić cudzysłowy na inny string.
Jeśli natomiast masz nieokreśloną odległość między słowami, to imo wygodniej użyć preg_split zamiast replace i explode.

Dodatkowo jak chcesz mieć pewność, że nie będzie błędów offsetu możesz skorzystać z funkcji next i current albo najzwyczajniej sprawdzać czy $t[x] nie jest puste.
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-2025 Invision Power Services, Inc.