fork download
  1. <?php
  2.  
  3.  
  4. //$text = "Кажется, нас обнаружили! Надо срочно уходить отсюда, пока не поздно. Бежим же скорее!";
  5. // Другие варианты для тестов
  6. $text = "Ну, прости меня! Не хотела я тебе зла сделать; да в себе не вольна была. Что говорила, что делала, себя не помнила.";
  7. //$text = "Идет гражданская война. Космические корабли повстанцев, наносящие удар с тайной базы, одержали первую победу, в схватке со зловещей Галактической Империей.";
  8.  
  9. //Делает первый символ заглавным
  10. function makeFirstletterUppercase($text) {
  11. $firstChar = mb_substr($text, 0, 1);
  12. $firstChar = mb_strtoupper($firstChar);
  13. $text = $firstChar . mb_substr($text, 1);
  14. return $text;
  15. }
  16.  
  17. function makeYodaStyleText($text) {
  18. $text = preg_replace("/[,:]/u", '', $text);
  19. $regForSentences = "/([!?;.]+\s*)/ui";
  20. $sentences = preg_split($regForSentences, $text, 0, PREG_SPLIT_NO_EMPTY|
  21. PREG_SPLIT_DELIM_CAPTURE);
  22. $sign = ''; //Для знака на конце предложений
  23. foreach ($sentences as $key => &$sentence)
  24. if (preg_match("/[!?;\\.]/u", $sentence)) {
  25. $sign = $sentence; //Сохраняем знак предыдущего предложения
  26. }
  27. else {
  28. $wordsInSentence = preg_split("/(\s)/u", $sentence, 0,
  29. PREG_SPLIT_NO_EMPTY);
  30. $wordsInSentence[0] = mb_strtolower($wordsInSentence[0]);
  31. $wordsInSentence = array_reverse($wordsInSentence);
  32. $sentence = implode(' ', $wordsInSentence);
  33. /*Если предыдущее предложение заканчивалось знаком';', то не будем
  34.   делать первый символ заглавным*/
  35. if (!preg_match("/;/u", $sign)) {
  36. $sentence = makeFirstletterUppercase($sentence);
  37. }
  38. }
  39.  
  40.  
  41. $result = implode($sentences);
  42. return $result;
  43. }
  44.  
  45. $yodaText = makeYodaStyleText($text);
  46. echo "Йода говорит: {$yodaText}\n";
Success #stdin #stdout 0.02s 24400KB
stdin
Standard input is empty
stdout
Йода говорит: Меня прости ну! Сделать зла тебе я хотела не; была вольна не себе в да. Помнила не себя делала что говорила что.