Почему не работает замена символов в строке PHP?
У вас кодировка UTF-8.
В этой кодировке русские символы кодируются двумя байтами.
Поэтому здесь:if($str[$index] == $first_arr[$j]){
вы сравниваете один байт с двумя байтами. Естественно, они не равны, так как длина разная.
Немного изменил. Теперь ваша функция производит замену.function fg($str)
{
    $rusToEng = ["а" => "a", "о" => "o", "у" => "y", "е" => "e", "с" => "c", "х" => "x"];
    $strChanged = '';

    foreach (preg_split('//u', $str) as $char) {
        if ($rusToEng[$char] && rand(1, 3) == 2) {
            $strChanged .= $rusToEng[$char];
        } else {
            $strChanged .= $char;
        }
    }

    return $strChanged;
}