gpt4 book ai didi

php - 如何替换字符串中的第 n 次出现

转载 作者:可可西里 更新时间:2023-11-01 12:27:46 25 4
gpt4 key购买 nike

我需要一个简单快速的解决方案来替换字符串中的第 n 次出现(占位符)。

例如,sql 查询中的第 n 个问号应替换为提供的值。

$subject = "SELECT uid FROM users WHERE uid = ? or username = ?";

所以,我需要像 str_replace_nth($seach, $replace, $subject, $nth) 这样的函数,对于第二个问号,它应该被称为 str_replace_nth("?", $用户名, $subject, 2);

有什么想法吗?

附言请不要建议我使用 PDO,因为我正在研究 FDO (Facebook Data Object)具有类似于 PDO 接口(interface)的库,但用于 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);

关于php - 如何替换字符串中的第 n 次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19907155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com