Subo aquí estas funciones que nos pueden sacar de algún problemilla cuando tienes que reemplazar la primera ocurrencia de una cadena de texto.
Estaría muy útil que str_replace se le pudiese pasar por parámetro el número de coincidencias que quieres reemplazar, pero no , desgraciadamente solo se puede reemplazar todo o nada utilizando esta función.
La primera solución que encuentro es utilizar preg_replace , en esta función si que le puedes pasar la ocurrencia que quieres sustituir, en este caso reemplazamos solo la primera, sería así:
preg_replace($from, $to, $subject, 1);
Si lo quieres meter y llamar desde dentro de una función puedes hacerlo así:
function str_replace_first($from, $to, $subject) { $from = '/'.preg_quote($from, '/').'/'; return preg_replace($from, $to, $subject, 1); } |
Esta solución está guay, pero utiliza expresiones regex, si lo que quieres encontrar es una expresión simple entonces esta perfecto, metes tu texto dentro de barras laterales “/” y listo.
Ahora bien, si lo que quieres usar como string es una cadena con caracteres y alguno de estos caracteres es un caracter especial ya te obliga a conocer regex, ya que puede que no encuentres tu texto o que reemplaces otros textos que no tienen nada que ver, por ejemplo si buscas textos de este tipo “{*texto” .
Para lograr buscar cualquier cadena de texto sin tener que utilizar una expresión regex, utilizaremos la siguiente función:
$pos = strpos($haystack,$needle); if ($pos !== false) { $newstring = substr_replace($haystack,$replace,$pos,strlen($needle)); } |
Si lo quieres meter y llamar desde dentro de una función puedes hacerlo así:
function str_replace_first($search, $replace, $subject) { $pos = strpos($subject, $search); if ($pos !== false) { return substr_replace($subject, $replace, $pos, strlen($search)); } return $subject; } |
Y listo, con esto tenemos dos maneras para poder reemplazar la primera ocurrencia de una cadena, espero que te valga!