Autor Zpráva
Dragonw
Profil
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
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
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
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
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
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
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
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 ))

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: