Autor | Zpráva | ||
---|---|---|---|
návštěvník Profil * |
#1 · Zasláno: 1. 1. 2014, 17:41:42
Můžete mi poradit? V tomto stringu se dosazují konstanty. á dojít k nahrazení {0} za výraz v poli v závorce
SELECT *,ROUND(hits/hits_count,3) as hits {0} FROM 19_membersu_main WHERE hits_count > 0 AND status > '6' AND gender='1' AND rate='1' AND files != '' ORDER BY {1} hits DESC, hits_count DESC LIMIT 3 K přejmenování dojde když použiju funkci: template($sql0,array("",""),1) Vytvořil jsem obdobnou metodu, ale přizpůsobenou moji třídě a ta mi nezamění ten řetězec {0} za "" jak bych očekával. První argument 1 string $sql0. // metoda public function template($index, $vars, $return_str = false ) { if ( is_int($index) ) $str = $index<0 ? $this->printm[abs($index)] : $this->template[$index]; else $str=$index; return $return_str ? $str : preg_replace("/{(\w+)}/e", "\$vars['\\1']", $str); } // funkce function template($text, $vars) { $msg = preg_replace("/{(\w+)}/e", "\$vars['\\1']", $text); return $msg; } Má vracet: SELECT *,ROUND(hits/hits_count,3) as hits FROM 19_membersu_main WHERE hits_count > 0 AND status > '6' AND gender='1' AND rate='1' AND files != '' ORDER BY hits DESC, hits_count DESC LIMIT 3 Co dělám špatně v té metodě? |
||
Davex Profil |
#2 · Zasláno: 1. 1. 2014, 18:35:27
návštěvník:
1) První podmínka není pravdivá, vykoná se větev else a do $str se přiřadí hodnota $index .
2) První výraz v ternárním operátoru je pravdivý, vykoná se druhý výraz a metoda vrátí hodnotu $str .
3) Pokud jsem to správně pochopil, tak by se ta metoda měla volat bez posledního parametru nebo by měl mít hodnotu adekvátní false .
|
||
Alphard Profil |
#3 · Zasláno: 1. 1. 2014, 18:43:33
Davex mě předběhl, takže jen doplním pár svých poznámek k [#2]. Samotný regulár by byl funkční, ale pokud pracujete jen s čísly,
\w je zbytečně tolerantní. Navíc s modifikátorem e se do budoucna nepočítá, doporučuji rovnou přepsat na preg_replace_callback(), nebo náhradu řešit úplně jinak.
|
||
návštěvník Profil * |
#4 · Zasláno: 1. 1. 2014, 19:33:41
Davex:
Aha, to jsem se teda nachytal s tím třetím argumentem. Dík |
||
Časová prodleva: 10 let
|
0