Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Jak rozdzielić ciąg znaków do zmiennych?
Forum PHP.pl > Forum > PHP
wembleyos
Witam. Tworze grę przeglądarkową. Zastanawiałem się nad jak najmniejszym wykorzystaniem pamięci bazy danych i chcę wyświetlać przebieg walki.
W rekordzie mam dane odpowiadające jednej rundzie:
Kod
użytkownik1/unik/nazwa_ataku \n
użytkownik2/atak/nazwa_ataku \n


Jak rozdzielić ten ciąg znaków by potem wyświetlić to na przykład tak:
Kod
Użytkownik wykonał unik i obronił się przed nazwa_ataku
Użytkownik2 wykonał atak nazwa_ataku i przeciwnik otrzymał obrażenie


Chodzi mi głownie o to, żeby np. te wartości przed pierwszym slashem dać do zmiennej user, drugą do atak a trzeci do kolejnej zmiennej nazwa_ataku. Jak to wykonać by wysłać te wartości do zmiennych?
Micchaleq
funkcja explode rozdzielasz to po / i otrzymujesz tablice z której możesz pózniej uzyskać te zmienne
wembleyos
No racja! A ja głupi kombinowałem z replace'mi smile.gif

No tak. A teraz zapytam pewnie o kolejną oczywistą głupotę. Jak zrobić by pokazywało mi cały ciąg znaków

To posiadam w bazie:
Kod
Konkret/unik/prosty
Konkret/atak/prosty
wembleyos/miss/sierpowy
Konkret/atak/sierpowy
wembleyos/miss/hak
Konkret/atak/hak
wembleyos/miss/korpus
Konkret/atak/korpus


Kod z wyświetlania
  1. <?php
  2. $pizza = $this->walka['runda'.$i.'_1'];
  3. $pieces = explode("/", $pizza);
  4.  
  5. echo $pieces[0]."->"; // nazwa użytkownika
  6. echo $pieces[1]."->"; // pozycja w walce
  7. echo $pieces[2]; // nazwa ataku
  8. echo "<br>";
  9. ?>


a wyświetla mi tylko pierwszy rząd
Kod
wembleyos->atak->prosty Konkret

Micchaleq
Witam,

co masz w zmiennej $pizza? ( wyświetl ją print_r($pizza) i wklej początek )

ogólnie to musisz to porozdzielać używając pętli foreach,
wembleyos
Kod
$pizza  = $this->walka['runda'.$i.'_2'];


czyli
Kod
Konkret/unik/prosty
Konkret/atak/prosty
wembleyos/miss/sierpowy
Konkret/atak/sierpowy
wembleyos/miss/hak
Konkret/atak/hak
wembleyos/miss/korpus
Konkret/atak/korpus


Nie chce tego załatwiać przez str_replace bo potem chciałem dodać losowo wybierany tekst zależnie od 3 watości.
Micchaleq
No tak to już napisałeś, jednak ja chce wiedzieć czy dane z jakich to pobierasz to jakaś tablica z bazy danych, czy tez z jakiegoś pliku.

to co napisałeś :
$pizza = $this->walka['runda'.$i.'_1'];

mówi mi, że zmienna przyjmuje tą walkę z rundy i to na pewno dzieje się w pętli for


PS wklej więcej kodu lub przekopiuj kawałek z wykonania takiej instrukcji :

  1. echo "<pre>";
  2. print_r($pizza);
  3. echo "</pre>";


albo jeszcze inaczej co masz pod zmienna $pizza[2] ?
wembleyos
Wszystko dzieje się w pętli for, ponieważ jest 8 rund, każda runda ma po "3 minuty" (x runda: 1minuta, 2minuta, 3 minuta) i w każdej minucie jest pokazywany przebieg odpowiadający określonej minucie, a pobieram to z tablicy z bazy danych.

Cały rekord z tabeli to właśnie ciąg tego rzędu
Kod
Konkret/unik/prosty
Konkret/atak/prosty
wembleyos/miss/sierpowy
Konkret/atak/sierpowy
wembleyos/miss/hak
Konkret/atak/hak
wembleyos/miss/korpus
Konkret/atak/korpus


czy dam to przez print_r czy $pizza[2] to wyskakuje i tak ten rekord smile.gif
Micchaleq
a więc najpierw

  1. $tmp = explode("\n" , $pizza);
  2.  
  3. for($j=1;$j<count($tmp)-1;$j++){
  4.  
  5. $pieces[$j-1] = explode("/", $tmp[$j]);
  6. }


Wyświetlanie

  1. foreach($pieces as $v){
  2. foreach($v as $p){
  3. echo $p." ";
  4. }
  5. echo "<br>";
  6. }



Oczywiście zmienne masz w $pieces[nr lini][numer informacji]
wembleyos
Zadam kolejne pytanie. Czy ty co jest wyżej (wersja prymitywna) przesłac do php i przez php pokolorować komunikaty i pozmieniać atak/prosty unik/prosty itp. na tekst czy już odrazu to wrzucić do bazy?
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.