2009-08-06 18 views
40

Ich baue einen ziemlich großen Lucene.NET Suchausdruck. Gibt es einen Best-Practice-Weg, um den String-Austausch in PHP zu tun? Es muss nicht so sein, aber ich hoffe auf etwas Ähnliches wie die C# String.Format Methode.C# String.Format() Entspricht in PHP?

Hier ist, wie die Logik in C# aussehen würde.

var filter = "content:{0} title:{0}^4.0 path.title:{0}^4.0 description:{0} ..."; 

filter = String.Format(filter, "Cheese"); 

Gibt es ein PHP5 Äquivalent?

+0

I denke, die Indizes deiner String-Platzhalter müssen drin sein Crementing, sonst wird es einen Fehler werfen. var filter = "Inhalt: {0} title: {1}^4.0 Pfad.Titel: {2}^4.0 Beschreibung: {3} ..."; –

+0

@BeowulfOF Wenn mein Gedächtnis mir gut tut, das würde keinen Fehler werfen, ersetzen Sie einfach jede Instanz von '{0}' durch "Käse" (im Beispiel). –

Antwort

65

Sie könnten die Verwendung sprintf function:

$filter = "content:%1$s title:%1$s^4.0 path.title:%1$s^4.0 description:%1$s ..."; 
$filter = sprintf($filter, "Cheese"); 

Oder Sie schreiben Sie Ihre eigene Funktion die {i} durch das entsprechende Argument zu ersetzen:

function format() { 
    $args = func_get_args(); 
    if (count($args) == 0) { 
     return; 
    } 
    if (count($args) == 1) { 
     return $args[0]; 
    } 
    $str = array_shift($args); 
    $str = preg_replace_callback('/\\{(0|[1-9]\\d*)\\}/', create_function('$match', '$args = '.var_export($args, true).'; return isset($args[$match[1]]) ? $args[$match[1]] : $match[0];'), $str); 
    return $str; 
} 
+3

+1 Sie waren 10 Sekunden schneller! –

+0

Danke, Gumbo. Sprintf hat es geschafft, obwohl es eher 1-basiert als 0-basiert zu sein scheint. Mit anderen Worten,% 0 $ s hat nicht funktioniert, aber% 1 $ s funktioniert. Danke noch einmal. –

+1

+1 für Link + Beispielcode. –