Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 03.07.2018
Сообщений: 19
1

Игра в города. Возвращает только первый встречный город

27.10.2018, 00:36. Просмотров 1568. Ответов 3
Метки нет (Все метки)

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

Найти маршрут перелета из города А в город В, не содержащий города С
Нужна помощь с написанием программы про пути в ориентированном графе. Текст задания: Дан список...

Post возвращает только первый символ из поля
post возвращает только первый символ из поля формы может кто встречался с этим ранее?

Функция возвращает только первый эллемент матрицы
функция должна возвращать обратную матрицу, но возвращает только первый элемент этой матрицы?!...

Заменить первый встречный отрицательный элемент матрицы на максимальный
Здравствуйте.Дана матрица С. Найти и вывести минимальный и максимальный элементы матрицы. Если их...

3
Эксперт PHP
4418 / 3600 / 1513
Регистрация: 24.04.2014
Сообщений: 10,632
27.10.2018, 01:02 2
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function normalizeCities(iterable $cities): array {
    $result = [];
    foreach ($cities as $city) {
        $first = mb_substr($city, 0, 1);
        if (!array_key_exists($first, $result)) {
            $result[$first] = [];
        }
        $result[$first][] = mb_strtolower($city);
    }
    
    return $result;
}
 
function getCity(array &$cities, string $letter): ?string {
    $letter = mb_strtolower($letter);
    if (!array_key_exists($letter, $cities)) {
        return null;
    }
    $letterCities = &$cities[$letter];
    $key = array_rand($letterCities);
    $city = $letterCities[$key];
    unset($letterCities[$key]);
    if ($letterCities === []) {
        unset($cities[$letter]);
    }
    
    return $city;
}
 
$cities = ['aba', 'acf', 'ar', 'fga', 'ry', 'yf'];
$cities = normalizeCities($cities);
var_dump(getCity($cities, 'a'));
0
0 / 0 / 0
Регистрация: 03.07.2018
Сообщений: 19
27.10.2018, 12:38  [ТС] 3
А можете дать краткое объяснение?
0
Эксперт PHP
4418 / 3600 / 1513
Регистрация: 24.04.2014
Сообщений: 10,632
27.10.2018, 12:42 4
Лучший ответ Сообщение было отмечено Алексей Чаус как решение

Решение

Цитата Сообщение от Алексей Чаус Посмотреть сообщение
А можете дать краткое объяснение?
Сначала привести список городов к виду ['первая буква' => ['список городов на эту букву']]. Когда надо получить город на определенныю букву, если в массиве есть список городов, начинающихся на эту букву, то берется случайный и удаляется из списка. Если нет, то null
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2018, 12:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вставить новую строку после строки, в которой находится первый встречный минимальный элемент
Условие: В двумерном массиве, элементы которого - целые числа, произвести след. действия: ...

Нахождение пути из города А в город Х
Написать программу нахождения пути из города А в город Х . Количество городов не менее 10....

Массивы. Вставить новую строку после строки, в которой находится первый встречный минимальный элемент
Условие: В двумерном массиве, элементы которого - целые числа, произвести след. действия: ...

Посчитать минимальную стоимость пути из города А в город Б
Есть массив городов .Из каждого города есть маршруты к другим городам .Выглядит этот массив так ...

Игра в "Города", не могу сделать так что бы города компьютер называл на рандом а не по списку
Самая обычная игра в города, нужно назвать город на последнюю букву соверника, но проблема в том...

Можно ли передать как нибудь интернет из города в город?
К примеру с Москвы в Ставрополь? Если такое оборудование чтоб передавало интернет как vpn...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.