Bucle de reemplazos con substr_replace

M

Intento reemplazar en una cadena de texto una serie de expresiones, en este caso "sin embargo", por unos sinónimos utilizando substr_replace; como no quiero que se repita el mismo sinónimo en la cadena, no uso str_replace. Conozco la posición, la longitud de la expresión y de la cadena, incluso el número de apariciones en el texto.
Pero no hay manera, lo he intentado con este bucle:


for ($num=0; $num<$apariciones_conector; $num++){
$rand_sinonimo = mt_rand(1, count($array_conectores)-1);
$reemplazo=$array_conectores[$rand_sinonimo];//REEMPLAZO ALEATORIO
$texto2=$texto;

$longitudconector=strlen($conector_buscado);

$textofinal[$num]= substr_replace ($texto2, $reemplazo,$array_posiciones[$num],$longitudconector);

	}

La cadena de texto:

$texto='te lo digo sin embargo yo estoy aquí sin embargo yo te lo digo veces sin embargo mas je je je';

Y lo más que obtengo es un array donde se reemplaza una vez solamente en una posicion dada en cada elemento del array.

Array ( [0] => te lo digo por otro lado yo estoy aquí sin embargo yo te lo digo veces sin embargo mas je je je [1] => te lo digo sin embargo yo estoy aquí además yo te lo digo veces sin embargo mas je je je [2] => te lo digo sin embargo yo estoy aquí sin embargo yo te lo digo veces asimismo mas je je je ) 

Mi objetivo es conseguir una única cadena con todos los reemplazos, sin que tenga por qué que repetirse el mismo sinónimo.
Estoy estancado, os agradecería muchísimo un poco de ayuda.

LOc0
<?php
	
$sinonimos=array('sin embargo' => array('no obstante', 'pero', 'de todas formas'));

$a='te lo digo sin embargo yo estoy aquí sin embargo yo te lo digo veces sin embargo mas je je je';

$cambiar='sin embargo';

$b=preg_replace_callback("/$cambiar/i", create_function('$m', 'global $sinonimos; $p=strtolower(trim($m[0])); return array_key_exists($p, $sinonimos)?(is_array($sinonimos[$p])?$sinonimos[$p][mt_rand(0, count($sinonimos[$p])-1)]:$sinonimos[$p]):$p;'), $a);

var_dump($b);

?>

http://es.php.net/manual/es/function.preg-replace-callback.php

Salu2 ;)

M

Eres una máquina; ¡mil veces mil gracias! ahora sé que no sé nada jeje, cuantas cosas por aprender. Una cosa que aún no domino bien es la función preg_replace_callback y las llamadas de retorno.

Habrá que estudiar... ¡Gracias de nuevo!

Una cosa, como podría conseguir que ese reemplazo fuera entre corchetes [ ] ?

M

Uff, el problema es que $sinonimos no es un array bidimensional sino un unico array del tipo:

 
$sinonimos=array('sin embargo' , 'no obstante', 'pero', 'de todas formas','de cualquier manera','en algún modo','como todo el mundo sabe');

De este array el primer elemento es la palabra buscada y el resto son sinónimos. Así lo tengo en una base de datos. ¿Podrías indicarme qué debería cambiar para que funcione?

Usuarios habituales