<?php

error_reporting(-1);
mb_internal_encoding('utf-8');

$text = "Кажется, нас обнаружили! Надо срочно уходить отсюда, пока не поздно. Бежим же скорее!";
// Другие варианты для тестов
// $text = "Ну, прости меня! Не хотела я тебе зла сделать; да в себе не вольна была. Что говорила, что делала, себя не помнила.";
// $text = "Идет гражданская война. Космические корабли повстанцев, наносящие удар с тайной базы, одержали первую победу, в схватке со зловещей Галактической Империей.";

/* Делает первую букву предложения заглавной */
function makeFirstletterUppercase($text) {
    $str = mb_strtoupper(mb_substr($text, 0, 1)).
    mb_substr($text, 1, mb_strlen($text));
    return $str;
}

function makeYodaStyleText($text) {
	
	$regexp = '/(?<=[\.\!\?][^\.\!\?])/u';
 
	$stringsArr = preg_split($regexp, $text, 0, PREG_SPLIT_NO_EMPTY);
	
	$wordsArray = array();
 
	foreach($stringsArr as &$value){
		array_push($wordsArray, preg_split('/(?<=\\W)/u', $value, 0, PREG_SPLIT_NO_EMPTY));
	}
	
	$arrOut = array();
	
	foreach($wordsArray as &$value){
		$value = array_reverse($value);
		$arrOut = array_merge($arrOut,$value);
	}
	
	$string = implode($arrOut, "");
	
    $string = preg_replace('/[\!\?\,\.\;]/u', ' ', $string);
    $string = preg_replace('/[\s]+/u', ' ', $string);
    $string = preg_replace('/([А-Я][а-я]*)/u', '$0.', $string);
    
    $stringsArr = preg_split($regexp, mb_strtolower($string), 0, PREG_SPLIT_NO_EMPTY);
    
	foreach($stringsArr as &$value){
		$value = makeFirstletterUppercase(trim($value));
	}
    
    $string = implode($stringsArr, " ");
	
    return $string;
}

$yodaText = makeYodaStyleText($text);
echo "Йода говорит: {$yodaText}\n";

