Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]jak wyciagnac z tablicy liczby mniejsze od 1?
Forum PHP.pl > Forum > Przedszkole
c4ash
Witam!

Mam liste na stronie na zasadzie:
Data Skad Kwota
data niestety w formacie 30 czerwiec 2014

Chcialem wyciagnac wszystkie liczby z kolumny kwota, a nastepnie je zsumowac. Jednak gdy w petli robie warunek is_numeric() to wyswietla mi owszem, dzien i rok, ale kwote tylko bierze ostatnia! (Dodam, ze wpisow jest kilka, a te kwoty co mnie interesuja sa dosc male - rzedu tysiecznych czesci). Czy przypadkiem is_numeric nie powinien wyrzucic wszystkich liczb?

Latwiej bedzie jak bedzie kod:
te dwa pierwsze str_replace sprowadzaja caly string do jednakowego formatu (czyli rozdzielenie kolejnych przez spacje).
  1. $pole = str_replace("\n", " ", $pole);
  2. $pole = str_replace(" "," ",$pole);
  3. $rozwal = explode(" ", $pole);
  4. for ($m = 0; $m < count($rozwal);$m++) {
  5.  
  6. if(is_numeric($rozwal[$m])) {
  7. echo $rozwal[$m].'<br >';
  8. }
  9. }

Aby nie bylo, echo daje wynik:
Kod
30
2014
30
2014
30
2014
0.00000020

Pyton_000
nna pewno da się preg_match,

Podaj kawałek wycinka danych
Damonsson
is_numeric działa ok. Błąd robisz pewnie gdzieś podczas tych swoich str_replace i explode.
c4ash
Cytat(Pyton_000 @ 1.07.2014, 15:04:17 ) *
Podaj kawałek wycinka danych

Prosze:
Kod
30 Jun 2014 3:15:05 PM UTC    fllips    0.00000050
30 Jun 2014 3:10:56 PM UTC    romain    0.00000060


Cytat(Damonsson @ 1.07.2014, 15:06:00 ) *
is_numeric działa ok. Błąd robisz pewnie gdzieś podczas tych swoich str_replace i explode.

A nie mozesz byc troche bardziej dokladny? Calosc kodu jest na stronie (no moze z wyjatkiem formularza, ale to sie nie liczy..).
Usuwajac linijki ze str_replace wynik jest o tyle ciekawszy, ze zostalo tylko 30 i 2014, juz bez tych ulamkow na koncu... No chyba, ze to wina explode?
packa
  1. $pole = str_replace(" "," ",$pole);



czy aby na pewno to jest odpowiednia ilość pustych spacji?
Po tym powinieneś otrzymać coś takiego

  1. $pole = '30 Jun 2014 3:15:05 PM UTC fllips 0.00000050 30 Jun 2014 3:10:56 PM UTC romain 0.00000060';


z pojedynczą spacją. Czy aby na pewno tak się dzieje?
nospor
Cytat
kwote tylko bierze ostatnia
Pewnie dlatego, ze za kwotą masz jakis bialy znak (nie spacja) i to niestety wowczas nie jest juz is_numeric. Takim znakiem moze byc np. \r, bo ty tylko zamieniasz \n, a w nie ktorych systemach nowa linia to \r\n a nie samo \n
Uzyj trim() na wartosciach ktore sprawdzasz. Powinno pomoc

ps: w ogole zabrales sie za to od 4 liter strony. To powinno byc wyrazenie regularne ktore lapie tylko to co chcesz i juz, po sprawie
Damonsson
Cytat(c4ash @ 1.07.2014, 15:34:18 ) *
A nie mozesz byc troche bardziej dokladny?

A co ja wróżka, żebym wiedział co podajesz na wejściu? withstupidsmiley.gif


Takie wyrażenie powinno Ci zadziałać:
Kod
([0-9.]+)$
bez żadnego kombinowania z replace i explode.

  1. preg_match('/([0-9.]+)$/', $pole, $matches);
  2. print_r($matches);
by_ikar
Cytat(Damonsson @ 1.07.2014, 16:01:10 ) *
A co ja wróżka, żebym wiedział co podajesz na wejściu? withstupidsmiley.gif


Takie wyrażenie powinno Ci zadziałać:
Kod
([0-9.]+)$
bez żadnego kombinowania z replace i explode.

  1. preg_match('/([0-9.]+)$/', $pole, $matches);
  2. print_r($matches);


No nie do końca, bo będzie to działać tylko dla ostatniego wystąpienia: http://www.regexr.com/39363 osobiście proponowałbym coś takiego: http://www.regexr.com/39369 do tego zwykłe asort:

  1. <?php
  2.  
  3. $c = '30 Jun 2014 3:15:05 PM UTC fllips 0.00000050
  4. 30 Jun 2014 3:10:56 PM UTC romain 0.00000070
  5. 30 Jun 2014 3:10:56 PM UTC romain 0.00000080
  6. 30 Jun 2014 3:10:56 PM UTC romain 0.00000090
  7. 30 Jun 2014 3:10:56 PM UTC romain 0.00000040
  8. 30 Jun 2014 3:10:56 PM UTC romain 0.00000020';
  9.  
  10. preg_match_all('/([\d]+\.[\d]+)/', $c, $matches);
  11.  
  12. asort($matches[0]);
  13.  
  14. var_dump($matches[0]);
Pyton_000
preg_match_all
Kod
(\d+\.[\d.]+)
c4ash
by_ikar - to jest to! Dziekuje i Tobie i wszystkim pozostałym za pomoc.
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.