Autor Zpráva
návštěvník
Profil *
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;
    }
formátovaně je to tady http://paste.ofcode.org/GH4ZLJymAVLPhr5FUb4qLM

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
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
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 *
Davex:
Aha, to jsem se teda nachytal s tím třetím argumentem. Dík

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: