Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Игра в города. Возвращает только первый встречный город
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Игра в города. Возвращает только первый встречный город

Страниц (1): [1]
 

1. lesha.dvornikov - 27 Октября, 2018 - 11:37:18 - перейти к сообщению
Написал примитивную игру в города на пшп. Есть массив с городами и две функции,одна определяет последнюю букву,другая возвращает город из массива на эту букву. Проблема в том, что возвращается первый встречный город,то есть всегда один на каждую букву. Пытался добавить массив в который будут добавляться уже использованные города, но не вышло. Предложите варианты решения проблемы. Вот код
PHP:
скопировать код в буфер обмена
  1. function getCity($first_letter)
  2. {
  3.    $a = массив с городами;
  4.    $cities = explode(',',$a);
  5.     foreach($cities as  $value) {
  6.         if ($first_letter == mb_substr($value, 0, 1))
  7.         {
  8.             return $value;
  9.         }
  10. }
  11.     return NULL;
  12. }
  13. function getLast($city)
  14. {
  15.     if(mb_substr($city,mb_strlen($city,'utf-8')-1,1) == 'ь' ||
  16.         mb_substr($city,mb_strlen($city,'utf-8')-1,1) == 'ы' ||
  17.         mb_substr($city,mb_strlen($city,'utf-8')-1,1) == 'ъ' ||
  18.     mb_substr($city,mb_strlen($city,'utf-8')-1,1) == 'й') {
  19.         return mb_substr($city,mb_strlen($city,'utf-8')-2,1);
  20.     }
  21.     return mb_substr($city,mb_strlen($city,'utf-8')-1,1);
  22. }
  23. function first_letter_up($string,$coding="utf-8"){
  24.     if (function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($string)) {
  25.         preg_match('#(.)#us', mb_strtoupper(mb_strtolower($string, $coding), $coding), $matches);
  26.         $string = $matches[1] . mb_substr($string, 1, mb_strlen($string, $coding), $coding);
  27.     }
  28.     else {
  29.         $string = ucfirst($string);
  30.     }
  31.     return $string;
  32. }
2. Мелкий - 27 Октября, 2018 - 11:59:03 - перейти к сообщению
lesha.dvornikov пишет:
function getLast($city)

Есть такой город в Ставропольском крае, Благодарный. Вы будете искать город на ы.
И, наоборот, с Й город начинаться может: Йошкар-Ола

Вам необходимо куда-то сохранять список использованных городов. При том, и программой и игроком. В простом случае массив - штука подходящая. Вам только необходимо обеспечить сохранение данных между вызовами скрипта. Например, писать в сессию.
3. Vladimir Kheifets - 28 Октября, 2018 - 08:15:07 - перейти к сообщению
Мелкий пишет:
lesha.dvornikov пишет:
function getLast($city)

Есть такой город в Ставропольском крае, Благодарный. Вы будете искать город на ы.
И, наоборот, с Й город начинаться может: Йошкар-Ола

Вам необходимо куда-то сохранять список использованных городов. При том, и программой и игроком. В простом случае массив - штука подходящая. Вам только необходимо обеспечить сохранение данных между вызовами скрипта. Например, писать в сессию.

Добрый день!
Согласен с Вами, что function getLast не работает, в том случае, если в конце слова встречается несколько недопустимых
символов - тех, с которых не могут начинаться названия городов.
Конечно, нужно как-то запоминать список использованных городов.
Не очень понятно откуда берётся список всех городов и есть ли в нём "Йошкар-Ола".
До "начала игры" не плохо бы, выделить набор символов, которые не встречаются в начале названий всех городов,
например: ъьый и немного изменить функцию getLast
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. function getLast($city)
  3. {
  4.    $city = preg_replace("/[ъьый]+$/ui","",$city);
  5.    return mb_substr($city,-1,1);
  6. }
  7. print "слово: \"Москва\" последний символ: \"".getLast("Москва")."\"<br>";
  8. print "слово: \"Твервь\" последний символ: \"".getLast("Твервь")."\"<br>";
  9. print "слово: \"Благодарный\" последний символ: \"".getLast("Благодарный")."\"";
  10. /*
  11. слово: "Москва" последний символ: "а"
  12. слово: "Твервь" последний символ: "в"
  13. слово: "Благодарный" последний символ: "н"
  14. */
  15. ?>
4. LIME - 02 Ноября, 2018 - 21:35:43 - перейти к сообщению
Vladimir Kheifets пишет:
До "начала игры" не плохо бы, выделить набор символов, которые не встречаются в начале названий всех городов,

бред
в мире чего только нет
еще надо понимать что эти символы это редкий случай и на общей картине не отразятся
не надо качать перформанс случаев которые встретятся один на миллион
выигрыш спички
на практике так не делают
5. Shopogilik - 21 Ноября, 2018 - 12:53:56 - перейти к сообщению
Как допишете прогу дадите поюзать, аж интересно стало

 

Powered by ExBB FM 1.0 RC1