<?php

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

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

/* Делает первую букву предложения заглавной */
function makeFirstletterUppercase($text) {
    $parts = preg_split('/(?<=[.!?])/u', $text, 0, PREG_SPLIT_NO_EMPTY);
		foreach($parts as $key => $sentence) {
			$sentence = trim($sentence);
			$otherPart = mb_substr($sentence, 1);
			$firstLetter = mb_strtoupper(mb_substr($sentence, 0, 1));
			$sentence = $firstLetter . $otherPart;
			$text = str_replace($parts[$key], $sentence, $text);
			$result = preg_replace('/[,.!?;]/', '$0 ', $text);
		}
	return $result;
}

function makeYodaStyleText($text) {
	$parts = preg_split('/[,.!?;]/u', $text, 0, PREG_SPLIT_NO_EMPTY);
		foreach ($parts as $key => $sentence) {
			$words = preg_split('/[ ,]/', $sentence, 0, PREG_SPLIT_NO_EMPTY);
			$reverseWords = array_reverse($words);
			$reverseWords = implode(' ', $reverseWords);
			$reverseWords = mb_strtolower($reverseWords);
			$text = str_replace($parts[$key], $reverseWords, $text);
			$result = makeFirstletterUppercase($text);
		}
	return $result;
}

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

