Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wydzielić liczbę ze stringa?
Forum PHP.pl > Forum > PHP
Ziem
Witam!
W jaki sposób wydzielić liczbę ze stringa?
Np.: mam tekst:
"Aktualnie mamy 205 graczy online."

W jaki sposób wyciągnąć z tego tekstu liczbę 205??

Pozdrawiam, Ziem!
tehaha
najprościej będzie chyba preg_match()

np. tak:
  1. $text = 'Aktualnie mamy 205 graczy online';
  2. preg_match('/([\d]+)/', $text, $match);
  3. print_r($match);

Fifi209
Jeżeli tekst się nie zmienia (prócz liczby) to możesz substr wyciąć.

o tak:
  1. <?php
  2.  
  3. $string = 'Aktualnie mamy 205 graczy online.';
  4.  
  5. $l = strlen($string);
  6.  
  7. var_dump(substr($string, 15, $l-30));
  8.  
  9.  
  10. ?>


@edit
@up
Cytat(tehaha @ 22.06.2010, 17:18:09 ) *
najprościej będzie chyba preg_match()

np. tak:
  1. $text = 'Aktualnie mamy 205 graczy online';
  2. preg_match('/([\d]+)/', $text, $match);
  3. print_r($match);

Mało optymalnie ;]
Ziem
Sam wpadłem na explode():
  1. $arr = explode(" ", $text);


Skoro tekst się nie zmienia to czy ten substr bedzie najwydajniejszy/najlepszy/itd. laugh.gif ?
Fifi209
Cytat(Ziem @ 22.06.2010, 17:32:30 ) *
Sam wpadłem na explode():
  1. $arr = explode(" ", $text);


Skoro tekst się nie zmienia to czy ten substr bedzie najwydajniejszy/najlepszy/itd. laugh.gif ?


Nie wiem, ale możesz pokusić się o testy w pętli dla np. 10 tysięcy powtórzeń, wyciągając średnią z wyników. ;]
Ziem
Kiedyś może sobie taki tekst wykonam, na razie ważne dla mnie jest aby działało biggrin.gif.
A gdyby długość tekstu była zmienna to zostajemy przy preg_match()/explode(), racja?
Wicepsik
  1. preg_replace('/[^0-9]/', '', $text); // jeśli w tekście jest jedna liczba
Ziem
Niestety, liczb jest kilka.

W zmiennej mam parę zdań:
"Aktualnie mamy 205 graczy online. Blabla [...] 22-06-22, i jeszcze jakieś dodatkowe liczby"

Myślałem jeszcze nad tym, aby pobrać pierwsze zdanie do kropki i ciachać jedynie:
"Aktualnie mamy 205 graczy online."


Jednak najłatwiej to zrobić z explode() i wybrać odpowiedni indeks tablicy.

Dzięki wszystkim za odpowiedz biggrin.gif i!
Lars_18
Możesz też dodać do wyrażenia regularnego słowo "mamy", bo się powtarza w każdym zdaniu.
Balor
  1. $tab = explode(" ", $string);
  2. foreach ($tab as $t)
  3. {
  4. if(preg_match('/^[0-9]+$/D', $t))
  5. echo $t;
  6. }
red9skull
Cytat(Wicepsik @ 22.06.2010, 18:18:33 ) *
  1. preg_replace('/[^0-9]/', '', $text); // jeśli w tekście jest jedna liczba

Wiesz, że wyrażenie [^0-9] oznacza, że w tekście nie może wystąpić cyfra? Gratulacje.
remik09
nie będę zakładał nowego tematu bo problem ten sam,

mam string:
Kod
index.php?a=kat&amp;id=2


chce w tym wyszukać cyfry, ale na żaden sposób nie chce mi znaleźć, zaczynam się już denerwować bo n-ta ilość wyrażeń regualrnych działa mi jak powinna a tutaj nie umiem wymyśleć dlaczego nic nie działa mi

próbowałem z określaniem jak 0-9 i \d ale nie wiem co źle piszę bo nie działa
krowal
Cytat(red9skull @ 23.06.2010, 16:41:50 ) *
Wiesz, że wyrażenie [^0-9] oznacza, że w tekście nie może wystąpić cyfra? Gratulacje.


Zdejmij klapki z oczu i popatrz szerzej, ta funkcja wyrzuci z ciągu wszystko co nie jest cyfrą. I co głupio Ci ? winksmiley.jpg
Rid
Cytat(krowal @ 17.12.2010, 16:12:18 ) *
Zdejmij klapki z oczu i popatrz szerzej, ta funkcja wyrzuci z ciągu wszystko co nie jest cyfrą. I co głupio Ci ? winksmiley.jpg

Sam zdejmi ,albo zacznij czytać od początku i do końca-właśnie taki efekt chciała uzyskać osoba, która założyła ten temat.Uważam że preg_match jest jednym z lepszych sposobów:)
bim2
Cytat(remik09 @ 17.12.2010, 16:47:33 ) *
nie będę zakładał nowego tematu bo problem ten sam,

mam string:
Kod
index.php?a=kat&amp;id=2


chce w tym wyszukać cyfry, ale na żaden sposób nie chce mi znaleźć, zaczynam się już denerwować bo n-ta ilość wyrażeń regualrnych działa mi jak powinna a tutaj nie umiem wymyśleć dlaczego nic nie działa mi

próbowałem z określaniem jak 0-9 i \d ale nie wiem co źle piszę bo nie działa

No tak, w świeta to wróżka przyleci i ze szklanej kuli nam wywróży co napisałeś, żeby znaleźć błąd. A nie, przecież szklana kula się potrzaskała ostatnio, zresztą wróżki nie istnieją.
laresistance
a ja mam w striingu coś takiego 2012/05
i chcę aby mi z tego wyrzuciło oddzielnie jako int 2012 oraz oddzielnie jako int 05
Co powinienem zastosować?
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.