Portál AbcLinuxu, 12. května 2025 07:52

Dotaz: regularny vyraz v php

18.12.2007 16:58 peter
regularny vyraz v php
Přečteno: 337×
Odpovědět | Admin
Ahoj, nevie mi niekto poradit ako by som v php pomocou funkcie ereg, alebo hoc akej inej nasiel v poli casov, ktore ma takyto format casu "2007-12-10 21:24:56" nasiel vsetky hodnoty ktore su vacsie ako napr tento cas "2007-12-10 21:23:34".
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.12.2007 17:09 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: regularny vyraz v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
Regexp sa na také niečo nedá použiť (teda použiť by sa to asi dalo, ale vyrobiť nejakú univerzálnu funkciu by bolo asi dosť zložité).

Pomocou funkcie strtotime by som ten dátum zmenil na unix timestamp a potom by som to normálne porovnával (teoreticky by malo stačiť porovnanie reťazcov aj bez tej zmeny).
18.12.2007 17:41 peter
Rozbalit Rozbalit vše Re: regularny vyraz v php
Hmm, teoreticky mi nestaci, musim si byt isty.
18.12.2007 18:01 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: regularny vyraz v php
Je problém to vyskúšať?

Ak sú tie reťazce presne také, ako sú v príklade, tak to stačiť bude (ale záleží to od toho, či sa k číslam menším ako 10 pridáva na začiatok 0; taký dátum tam nie je ani jeden).
Josef Kufner avatar 18.12.2007 19:24 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: regularny vyraz v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus popsat i přilehlé okolí problému, který řešíš, třeba bude jednodušší a efektivnější cesta...

Jinak porovnání řetězců na tohle stačí a porovnání integerů vzniklých odstraněním nečíslic také.
Hello world ! Segmentation fault (core dumped)
18.12.2007 21:04 lmanik
Rozbalit Rozbalit vše Re: regularny vyraz v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
mktime() myslim, prevedes oba dva casy pres mktime a pak jen porovnas pres ><=! :)
18.12.2007 22:22 oron | skóre: 27
Rozbalit Rozbalit vše Re: regularny vyraz v php
ak je ten cas ulozeny v db, tak by sa malo dat aby ti rovno db
vratila riadky kde je cas vacsi ako potrebujes
18.12.2007 23:19 Sinuhet | skóre: 31
Rozbalit Rozbalit vše Re: Dve neprilis komplikovane otazky
Odpovědět | | Sbalit | Link | Blokovat | Admin
$times = array(
	'2007-12-10 21:22:56',
	'2007-12-10 21:24:57',
	'2007-12-10 21:22:58',
	'2007-12-10 21:24:59'
);

$res = array_filter($times, create_function('$a', 'return strcmp($a, "2007-12-10 21:23:34") >p; 0;'));

print_r($res);
Nevyzkouseno
18.12.2007 23:23 Sinuhet | skóre: 31
Rozbalit Rozbalit vše Re: Dve neprilis komplikovane otazky
Datumy samozrejme museji byt ve formatu 'Y-m-d H-i-s' (brano podle php fce date()).
AraxoN avatar 18.12.2007 23:54 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: regularny vyraz v php
Odpovědět | | Sbalit | Link | Blokovat | Admin

To je ISO formát času (ISO 8601), a jeho vlastnosťou už z návrhu je, že lexikografické poradie je zhodné s chronologickým. Takže je možné časové údaje úspešne porovnávať aj ako stringy. A ak je prvý string "menší" ako druhý, tak to znamená, že prvý nastal (alebo nastane) skôr než druhý.

K odpovedi na pôvodnú otázku: netreba Ti žiadne regulárne výrazy. Ak to máš v poli, tak stačí cez foreach prechádzať a porovnávať všetky záznamy (zložitosť O(n)). Ak je to pole zoradené, tak potom stačí len nájsť hranicu polením intervalu a použiť správnu polovicu poľa (zložitosť O(log n)). A ak údaj pochádza z databázy, tak je najlepšie nechať databázu vybrať len vyhovujúce riadky, a v PHP to vôbec netriediť.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.