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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Игра в города. Возвращает только первый встречный город

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
lesha.dvornikov
Отправлено: 27 Октября, 2018 - 11:37:18
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Окт. 2018  


Помог: 0 раз(а)




Написал примитивную игру в города на пшп. Есть массив с городами и две функции,одна определяет последнюю букву,другая возвращает город из массива на эту букву. Проблема в том, что возвращается первый встречный город,то есть всегда один на каждую букву. Пытался добавить массив в который будут добавляться уже использованные города, но не вышло. Предложите варианты решения проблемы. Вот код
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. }
 
 Top
Мелкий Супермодератор
Отправлено: 27 Октября, 2018 - 11:59:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




lesha.dvornikov пишет:
function getLast($city)

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

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


-----
PostgreSQL DBA
 
 Top
Vladimir Kheifets
Отправлено: 28 Октября, 2018 - 08:15:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Мелкий пишет:
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. ?>

(Отредактировано автором: 28 Октября, 2018 - 08:21:58)

 
 Top
LIME
Отправлено: 02 Ноября, 2018 - 21:35:43
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Vladimir Kheifets пишет:
До "начала игры" не плохо бы, выделить набор символов, которые не встречаются в начале названий всех городов,

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


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2018  


Помог: 0 раз(а)




Как допишете прогу дадите поюзать, аж интересно стало
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB