我需要一个简单快速的解决方案来替换字符串中的第n个出现的位置(占位符)。
例如,应将sql查询中的第n个问号替换为提供的值。
$subject = "SELECT uid FROM users WHERE uid = ? or username = ?";
因此,我需要像这样的函数str_replace_nth($seach, $replace, $subject, $nth)
,对于第二个问号,它应称为str_replace_nth("?", $username, $subject, 2);
有任何想法吗?
PS:请不要建议我使用PDO,因为我正在使用FDO(Facebook数据对象)一个具有类似于PDO的接口的库,但用于FQL。
重要通知!我发现这种方法不好,因为在第一次替换之后,查询被修改并且索引丢失。(当您在深夜编程时会出现错误的方法:()因此,正如@GolezTrol在评论中提到的,最好一次全部替换掉。
这是您要求的功能:
$subject = "SELECT uid FROM users WHERE uid = ? or username = ?";
function str_replace_nth($search, $replace, $subject, $nth)
{
$found = preg_match_all('/'.preg_quote($search).'/', $subject, $matches, PREG_OFFSET_CAPTURE);
if (false !== $found && $found > $nth) {
return substr_replace($subject, $replace, $matches[0][$nth][1], strlen($search));
}
return $subject;
}
echo str_replace_nth('?', 'username', $subject, 1);
注意:$nth
是从零开始的索引!
但我建议使用类似以下的内容替换占位符:
$subject = "SELECT uid FROM users WHERE uid = ? or username = ?";
$args = array('1', 'steve');
echo vsprintf(str_replace('?', '%s', $subject), $args);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句