Se supone que si envías un cuarto parámetro a str_replace se realizará solo esa cantidad de reemplazos:
Código PHP:
Ver original$buscar = 'Carlos';
$reemplazar = 'German';
$cadenax = 'Andrés;Carlos;Luis;Carlos;Alejandro;Carlos';
$cadenax = str_replace($buscar, $reemplazar, $cadenax, 1);
Más info en:
str_replace()
El problema sería que el elemento a reemplazar no fuera el primero.