В базовом наборе функций PHP такого нет. Но вы можете реализовать это с помощью substr_replace()
.
$sql = "foo (bar, baz, blub) bar (boo, far, faz)";
// only replace first occurance
$firstpos = strpos($sql, ')');
$sql = substr_replace($sql, ', custom_value)', $firstpos, 1);
// only replace second occurance
$secondpos = strpos( $sql, ')', strpos( $sql, ')' ) + 1);
$sql = substr_replace( $sql, ', 123456)', $secondpos, 1);
echo $sql, PHP_EOL;
Полученные результаты:
foo (bar, baz, blub, custom_value) bar (boo, far, faz, 123456)
Переписано как повторно используемая функция:
function str_replace_occurance($search, $replace, $subject, $occurance) {
$pos = NULL;
for ($i = 1; $i <= $occurance; $i++) {
$pos = strpos($subject, $search, ($pos===NULL) ? 0 : $pos+1);
}
return substr_replace($subject, $replace, $pos, strlen($search));
}
$sql = str_replace_occurance(')', ', custom_value)', $sql, 1);
$sql = str_replace_occurance(')', ', 1234567890)', $sql, 2);
echo $sql, PHP_EOL;
Редактировать: изменен порядок параметров, чтобы они имели тот же порядок и имя, что и исходные str_replace
person
Kaii
schedule
28.03.2012