Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Reemplazar la primera ocurrencia de una cadena con PHP

4 junio, 2019
php

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:
php

$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!