Autor | Zpráva | ||
---|---|---|---|
Dragonw Profil |
#1 · Zasláno: 20. 2. 2010, 12:30:03
Dobrý den mám menší problém s porovnáním čísel.
Snažím se je porovnat přes regulární výrazy, ale eregi a preg_replace mi dělají stejnej problém. $hledej = '11'; eregi ('11', $hledej) V tomhle případě je výsledek true na 1 a 11, jakým způsobem bych mohl zajístit aby výsledek true vyšel jenom u čísla 11 a né aji u jedničky? Zkoušel jsem aji negaci, ale ta mě dá zase u 11 a 1 false. $hledej = '11'; eregi ('[^0–9]', '11', $hledej) |
||
Joker Profil |
#2 · Zasláno: 20. 2. 2010, 12:42:13
Dragonw:
Je nějaký důvod porovnávat číslo přes regulární výrazy? Mně to přijde jako docela zvěrstvo :-) Co třeba if(intval($hledej) == 11)? |
||
Nox Profil |
#3 · Zasláno: 20. 2. 2010, 12:43:16 · Upravil/a: Nox
1/ Pro takovéto jednoduché porovnání používej třeba viz Joker nebo strpos atd., je to mnohem rychlejší
2/ Když už, tak se doporučují preg_* funkce, eregi jsou starší 3/ Takže vrací true ikdyž je $hledej='1'; To je divné, podle mě by to tak nemělo fungovat ... nedáváš jedničku naopak jen do patternu (1. argument) 4/ Druhý kód je trochu zvláštně napsaný, do 3. argumentu eregi se podle manuálu přiřazuje výsledné nalezené skupiny |
||
nightfish Profil |
#4 · Zasláno: 20. 2. 2010, 12:49:14
Nox:
„Pro takovéto jednoduché porovnání používej třeba ... strpos atd., je to mnohem rychlejší“ strpos pro porovnání čísla? to mi nepřipadne jako dobrý nápad ("11" vs. "111") |
||
Joker Profil |
#5 · Zasláno: 20. 2. 2010, 12:51:58
Nox:
„eregi jsou starší“ To bych trochu upřesnil, na eregi ani tak nevadí že jsou starší, jako že jsou zastaralé (deprecated) a od PHP6 budou odstraněny. |
||
Nox Profil |
#6 · Zasláno: 20. 2. 2010, 12:58:34
J, pravda, nebylo to ideální
nightfish: 1/ Tak myslel jsem obecně pro jednoduché porovnání.... takhle konkrétně s intvalem si nejsem jistý jestli by náhodou strpos nebyl o trošku rychlejší, jelikož už přímo v něm by mělo být optimalizované hledání, zatímco intval prostě jen vrátí číslo (jasně, je to míň přehledný a čistý a ten rozdíl v rychlosti bude minimální) 2/ ("11" vs. "111") ...no...i to může být záměr, nevim co přesně Dragonw chce, ale uznávám že v hodně případech by to mé vracelo skutečně špatné výsledky Joker: J, díky za korekci (tedy nevěděl jsem že budou komplet odstraněné) |
||
Dragonw Profil |
#7 · Zasláno: 20. 2. 2010, 13:07:12
Ty kódy co jsem poslal jsou jenom zkácenina scriptu, kterej řešim
V normálu hledám v xml souboru přes simple údaje který rozeznávám podle toho čísla, který zadám do $hledej, ale pořád se mi tam cpe ta jednička, který se potřebuju zbavit. Protože mi vypisuje k údaji z 11 aji údaj který pod 1. $hledej = '11'; if ($xml->RaceResults->Race->Driver[0] and (eregi ($xml->RaceResults->Race->Driver[0]->Position, $hledej ))) echo $xml->RaceResults->Race->Driver[0]->Name; Jestli-že existuje umístění v XML Driver[0] a jeho obsah pozice (Position) je 11, potom vypiš jeho jméno (Name) V tomhle případě mi vypisuje dvě jména nejdřív toho co má v pozici 1 a potom toho co má 11. |
||
Joker Profil |
#8 · Zasláno: 20. 2. 2010, 13:24:10
Dragonw:
Eh... je to čím dál podivnější. Když to vezmu od "nejmíň WTF" po "nejvíc WTF", tak: 1. Už výše je zmíněno, že se nedoporučuje používat ereg* funkce. 2. Dáváte do eregi argumenty obráceně, viz manuál- první má být regulární výraz a druhý to v čem se hledá. 3. No a teď zlatý hřeb: Jestli teda dobře chápu ten popis, má přes if projít v $xml->RaceResults->Race->Driver[0]->Position jedině stejná hodnota jako je v $hledej. V tom případě proč proboha nepoužijete operátor porovnání?! if ($xml->RaceResults->Race->Driver[0] and ($xml->RaceResults->Race->Driver[0]->Position == $hledej )) |
||
Časová prodleva: 14 let
|
0