| 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 3K 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: 12 let
|
|||
0