[英]PHP Replacing Character Inside String With Variable
簡而言之,我正在嘗試替換所有的“?” 值包含在變量中,它將不起作用。 請幫忙。
$string = "? are red ? are blue";
$count = 1;
update_query($string, array($v = 'violets', $r = 'roses'));
function update_query($string, $values){
foreach ( $values as $val ){
str_replace('?', $val, $string, $count);
}
echo $string;
}
我得到的輸出是: 是紅色的 ? 是藍色的
由於人們不注意而感到沮喪,我不得不正確地回答這個問題。
str_replace
將替換搜索字符串的所有實例。 因此,在violets
之后,就沒有什么可以代替的roses
了。
可悲的是, str_replace
沒有限制參數,但是preg_replace
卻沒有。 但是實際上,您可以使用preg_replace_callback
更好地做到,就像這樣:
function update_query($string, $values){
$result = preg_replace_callback('/\?/', function($_) use (&$values) {
return array_shift($values);
}, $string);
echo $string;
}
您忘記將其設置為等於變量。
$string = str_replace('?', $val, $string, $count);
您可能想在新字符串中捕獲來自str_replace的返回值,並在每次替換時回顯它,並按引用傳遞$ count。
foreach ( $values as $val ){
$newString = str_replace('?', $val, $string, &$count);
echo $newString;
}
這是最好,最干凈的方法
<?php
$string = "? are red ? are blue";
$string = str_replace('?','%s', $string);
$data = array('violets','roses');
$string = vsprintf($string, $data);
echo $string;
$string = "? are red ? are blue";
update_query($string, array('violets','roses'));
function update_query($string, $values){
$string = str_replace('?','%s', $string);
$string = vsprintf($string, $values);
echo $string;
}
好的,這里是一些好帖子的綜合解決方案。
$string = "? are red ? are blue";
update_query($string, array($v = 'violets', $r = 'roses'));
function update_query($string, $values){
foreach ( $values as $val ){
$string = preg_replace('/\?/', $val, $string, 1);
}
echo $string;
}
如前所述, preg_replace
將允許限制要更新的匹配項的數量。 謝謝你們。
您可以通過兩種方式解決此問題:
1)將問號替換為其各自的值。 有一百種方法可以解決這個問題,但是對於這樣的事情,我寧願只用老式的方法來解決:找到問號,然后用新的值一一替換。 如果$arr
的值本身包含問號,則將忽略它們。
function update_query($str, array $arr) {
$offset = 0;
foreach ($arr as $newVal) {
$mark = strpos($str, '?', $offset);
if ($mark !== false) {
$str = substr($str, 0, $mark).$newVal.substr($str, $mark+1);
$offset = $mark + (strlen($newVal) - 1);
}
}
return $str;
}
$string = "? are red ? are blue";
$vars = array('violets', 'roses');
echo update_query($string, $vars);
2)或者,您可以自己輕松使用唯一標識符。 這使您的代碼更易於理解,並且更具可預測性和魯棒性。
function update_query($str, array $arr) {
return strtr($str, $arr);
}
echo update_query(':flower1 are red :flower2 are blue', array(
':flower1' => 'violets',
':flower2' => 'roses',
));
您甚至可以只使用strtr()
,但是將其包裝在一個可以更容易記住的函數中(這在您的代碼中很有意義)也將起作用。
哦, 如果您打算使用它來創建SQL查詢,則應該重新考慮。 請改用數據庫驅動程序的預處理語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.