2017-07-25 2 views
-1

Ich möchte Platzhaltervariablen in einer Zeichenfolge dynamisch ersetzen.PHP ersetzen Platzhaltervariablen in Zeichenfolge

str_replace("\$", $data["Whatever follows the \$], $variable); 

\$ bedeutet einen Platzhalter Variable, \$ID zum Beispiel.

Die Daten, die ich ersetzen möchte, sind in einem Array. $\ID sollte durch $data['ID'] ersetzt werden.

Zum Beispiel, wenn ich eine Zeichenfolge habe, die sagt "Die ID ist \$ID und der Name ist \$name". Ich möchte sowohl die $ ID als auch den $ Namen durch die relevanten Daten in meinem $data Objekt ersetzen. $\ID wäre $data['ID'] und so weiter.

Dies muss dynamisch sein. Ich möchte es nicht hart codieren, um \$ID durch $data['ID'] zu ersetzen. Der Schlüssel, der verwendet wird, um die Daten in $ data zu erhalten, sollte dem entsprechen, was auf die \$ folgt.

Ich habe Probleme herauszufinden, nicht nur, wie dies dynamisch zu tun, wie ich darüber gesprochen habe, aber es für jede \$ in einer Zeichenfolge zu tun.

+0

warum nicht printf verwenden? –

Antwort

0

Verwenden Sie printf() oder sprintf().

Wenn Sie Ihren Platzhalter mit einer Zahl markieren, können Sie ihn mehrmals in Ihrer Zeichenfolge wiederholen.

sprintf("This is my test string. Here's a placeholder: %1$s, and a another: %2$s, First one again: %1$s", $var1, $var2); 
0

Versuchen Sie folgendes:

$string = 'some $ID $PARAM string'; 
$values = array("ID" => "idparam", "PARAM" => "p"); 

preg_match_all("/\\\$(?<name>[a-zA-Z0-9]+)/", $string, $matches); 

foreach($matches["name"] as $m) { 
    if(!isset($values[$m])) { 
     //TODO handling 
     continue; 
    } 
    $string = str_replace('$'.$m, $values[$m], $string); 
} 

var_dump($string); 

Die Schlüssel in $values sollte ohne das Dollarzeichen Name des Parameters sein.

0

Dies wird die Aufgabe für Sie erledigen! https://3v4l.org/XRQii

<?php 

$string = 'The ID is \$ID and name is \$name'; 
$row = [ 
    'ID'=> 5, 
    'name' => 'delboy1978uk', 
]; 


function replaceStuff($string, $row) { 
    preg_match_all('#\\$\w+#', $string, $matches); 
    foreach ($matches[0] as $match) { 
     $key = str_replace('$', '', $match); 
     $replace = '\\'.$match; 
     $string = str_replace($replace, $row[$key], $string); 
    } 
    return $string; 
} 

echo replaceStuff($string, $row); 

Siehe http://php.net/manual/en/function.preg-match-all.php für weitere Informationen auf preg_match_all().

Verwandte Themen