Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]jak wyciagnac z tablicy liczby mniejsze od 1?, is_numeric akceptuje tylko ostatnia
c4ash
post
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 9
Dołączył: 14.01.2010

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


nna pewno da się preg_match,

Podaj kawałek wycinka danych
Go to the top of the page
+Quote Post
Damonsson
post
Post #3





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


is_numeric działa ok. Błąd robisz pewnie gdzieś podczas tych swoich str_replace i explode.
Go to the top of the page
+Quote Post
c4ash
post
Post #4





Grupa: Zarejestrowani
Postów: 73
Pomógł: 9
Dołączył: 14.01.2010

Ostrzeżenie: (0%)
-----


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?

Ten post edytował c4ash 1.07.2014, 14:41:59
Go to the top of the page
+Quote Post
packa
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 2
Dołączył: 16.01.2014

Ostrzeżenie: (0%)
-----


  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?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Damonsson
post
Post #7





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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);


Ten post edytował Damonsson 1.07.2014, 15:17:08
Go to the top of the page
+Quote Post
by_ikar
post
Post #8





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


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]);
Go to the top of the page
+Quote Post
Pyton_000
post
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


preg_match_all
Kod
(\d+\.[\d.]+)
Go to the top of the page
+Quote Post
c4ash
post
Post #10





Grupa: Zarejestrowani
Postów: 73
Pomógł: 9
Dołączył: 14.01.2010

Ostrzeżenie: (0%)
-----


by_ikar - to jest to! Dziekuje i Tobie i wszystkim pozostałym za pomoc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 04:38