2010-12-06 9 views
0
$content = "... [gallery=174] ... "; 
echo $c = preg_replace('/\[gallery=([0-9]+)\]/',gallery("$1"),$content); 
function gallery($id) 
{ 
    mysql_query("select * from `table` where `id` = '$id'"); 
} 

mais comme il $id comprendre $1, au lieu de 174 dans la requête.problème lorsque vous appelez une fonction preg_replace

Quelle est la raison? Et comment puis-je le réparer?

Merci beaucoup

Répondre

3

Ce que vous essayez de faire est impossible avec preg_replace: gallery() sera exécuté avant la chaîne est recherchée, vous ne pouvez pas spécifier le résultat $1 dans ses paramètres. Vous recherchez preg_replace_callback().

+0

+1, preg_replace_callback() devrait répondre à vos besoins – SW4

+0

j'ai oublié cette fonction :(Super, merci mach :) – Simon

2

EDIT: si vous essayez de le remplacer, vous devez utiliser à la place preg_replace_callback(), comme ceci:

$c = preg_replace_callback('/\[gallery=([0-9]+)\]/', 'gallery', $m); 

function gallery($m) 
{ 
    $id = (int) $m[1]; 
    $result = mysql_query("select * from `table` where `id` = '$id'"); 

    // Fetch $result and return the appropriate gallery code here 
} 

Vieille réponse

Vous devriez utiliser preg_match() pour trouver le match parce que vous n'êtes pas tr ying pour le remplacer par une requête SQL, en obtenant simplement la valeur de la chaîne à utiliser dans la requête SQL. Essayez ceci:

$m = array(); 
preg_match('/\[gallery=([0-9]+)\]/', $content, $m); 
$id = (int) $m[1]; // The value of the backreference $1 
gallery($id); 

Je crois aussi votre fonction gallery() doit retourner mysql_query() afin que vous puissiez analyser l'ensemble des résultats de la requête:

function gallery($id) 
{ 
    return mysql_query("select * from `table` where `id` = '$id'"); 
} 
+0

Mais j'ai besoin de le remplacer. si j'ai un texte dans '$ conten't avant et après' [gallery = 174] ', je dois les stocker, juste remplacer [...] par du contenu (retourné de la base de données) ... – Simon

+0

@Syom : Mon erreur alors, s'il vous plaît voir mon édition. – BoltClock

Questions connexes