简而言之,我试图取代所有的“?”使用变量中的值,它不起作用。请帮忙。
$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;
}
我得到的输出是:?是红色的 ?是蓝色的
答案 0 :(得分:2)
由于没有注意的人感到沮丧,我不得不正确地回答这个问题。
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;
}
答案 1 :(得分:0)
您忘了将其设置为等于您的变量。
$string = str_replace('?', $val, $string, $count);
答案 2 :(得分:0)
您可能希望从新字符串中捕获str_replace的返回值,并为每次替换时回显它,并通过引用传递$ count。
foreach ( $values as $val ){
$newString = str_replace('?', $val, $string, &$count);
echo $newString;
}
答案 3 :(得分:0)
这是最好和最干净的方法
<?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;
}
答案 4 :(得分:0)
好的家伙在这里是一些好帖子的解决方案。
$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
将允许限制更新的匹配数量。谢谢大家。
答案 5 :(得分:0)
您可以通过两种方式解决此问题:
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查询,那么你应该重新考虑一下。请改用数据库驱动程序的预备语句。