2016-11-18 2 views
-1

Dies ist meine JSON-Datei sample.jsonWie JSON-Wert mit Preg_replace ersetzen?

{ 
    "lbl_name":"Your name", 
    "dynamic_name":"Hi, {{ name 1 }}, {{ name 2 }} and {{ name 3 }}" 
} 

und

$content = file_get_contents(sample.json); 
$translate = json_decode$content, true); 
$replaceContent = preg_replace('/\{{[^)]*\}}/', '%s', $translate); 
print_r($replaceContent); 

Ich erhalte Ergebnis

Array ([lbl_name] => Your name [dynamic_name] => Hi %s) 

I Ergebnis sein sollte

wollen
Array ([lbl_name] => Your name [dynamic_name] => Hi %s, %s and %s) 

Dank

+1

Ihre regex Stellen nicht gierig: '*' -> '*?' – Rizier123

Antwort

1

Ihre Regex ist gierig, daher versucht, die größten Match es zu bekommen.

verwenden, um die ? -Kontrolle Charakter Ihr Muster nicht gierig zu machen, was bedeutet es, das Spiel kleinste passt es bekommen kann:

$data = "Hi, {{ name 1 }}, {{ name 2 }} and {{ name 3 }}" 
echo preg_replace('/{{[^)]*?}}/', '%s', $data); 
//prints Hi, %s, %s and %s 
1

dies zu überprüfen,

$data = '{ 
    "lbl_name":"Your name", 
    "dynamic_name":"Hi, {{ name 1 }}, {{ name 2 }} and {{ name 3 }}" 
}'; 

$data = json_decode($data, true); 

$dynamic_name = $data['dynamic_name']; 
$lbl_name = $data['lbl_name']; 

preg_match_all('/{{ (.*?) }}/', $dynamic_name, $display); 
$dynamic_name = "Hi ".$display[1][0].", ".$display[1][1]." and ".$display[1][2]; 

$newArray = array('lbl_name'=> $lbl_name, 'dynamic_name'=>$dynamic_name); 
print_r($newArray); 
Verwandte Themen