2017-09-19 3 views
0

Sorry für die Wiederholung der Frage, aber ich habe individuelle Fall mit der Verwendung von Preg_replace-Funktion. Dies ist die Funktion ersetzen Variablen ($ vars) in Vorlage ($ data) aus ihren Namen zu ihren WertenUmwandlung von preg_replace zu preg_replace_callback

function replace_vars($data, array $vars) { 
    return preg_replace(array('/\{\{([a-zA-Z0-9_]+)\}\}/e', '/\{\{([a-zA-Z0-9_]+):(\d+)\}\}/e'), 
     array("\$vars['\\1']", "\$vars['\\1'][\\2]"), $data); 
} 

$ template Fragment

<td>{{name}}</td> 
<td>{{active_items}}</td> 
<td>{{percents}} %</td> 

Funktionsaufruf

$report = ''; 
$f['name'] = 'some name'; 
$f['active_items'] = 237; 
$f['percents'] = 'some name'; 
$report .= $mailer->replace_vars($template, $f); 

Wie Kann ich es schaffen?

Antwort

0

Wenn ich dich gut verstanden habe, ist es einfach.

preg_replace_callback([...], function($matches) use ($vars) { 
    # Use ($vars) will inherit it from the current scope 
    $v = $vars[$matches[1]]; # Select item with key of capturing group 1 
    if ($matches[2]) { # If group 2 was matched 
    $v = $v[$matches[2]]; # Select contents of item with the same key as it's value from the previous item 
    } 
    return $v; # Replace it. 
}, [...]); 

Es wird jedes Spiel mit $var[\1] oder $var[\1][\2] wenn die Gruppe 2 ersetzen wurde angepasst.

Verwandte Themen