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 :: Рандомный выбор слова в строке.
Покинул форум
Сообщений всего: 24
Дата рег-ции: Февр. 2021
Помог: 1 раз(а)
Для начала, чтобы было понятно, что мне нужно - покажу, что я сделал.
Допустим, имеется строка: Железнодорожный семафор имеет {красный|жёлтый|зелёный|синий|белый} свет свечения.
Мне нужно получить строку с одним рандомным цветом, либо исходную строку, если в ней нет вариантов выбора.
Я делаю так:
Железнодорожный семафор имеет жёлтый свет свечения.
А теперь мне нужно сделать выбор из двух (или более) массивов: Железнодорожный {светофор|семафор} имеет {красный|жёлтый|зелёный|синий|белый} свет свечения.
Как определить какой элемент массива сам является массивом, чтобы произвести из него выбор?
Как обратно собрать строку, если число вариантов выбора и, соответственно, элементов массива может быть любым?
Подскажите, пожалуйста, как сделать такой выбор при тех же условиях?
И, вообще, я правильно решаю эту задачу?
ALEN
Отправлено: 13 Октября, 2022 - 09:49:03
Участник
Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Помог: 11 раз(а)
https://www.php.net/manual/en/fu...ace-callback.php в замыкании делишь строку по пробелу, регуляркой не нужно (более дорогая), достаточно explode и потом получив случайное число от 0 до количества элементов в коллекции вытаскиваешь этот рандомный элемент и возвращаешь в строку
LML
Отправлено: 07 Ноября, 2022 - 14:20:13
Новичок
Покинул форум
Сообщений всего: 24
Дата рег-ции: Февр. 2021
Помог: 1 раз(а)
ALEN пишет:
https://www.php.net/manual/en/fu...ace-callback.php в замыкании делишь строку по пробелу, регуляркой не нужно (более дорогая), достаточно explode и потом получив случайное число от 0 до количества элементов в коллекции вытаскиваешь этот рандомный элемент и возвращаешь в строку
preg_replace_callback, действительно интересная функция. Но по ней что-то совсем мало информации, чтобы разобраться. Максимум, что у меня с ней получилось - это выбирать цвет.
Что-то я никак не могу понять, как правильно её применять.
Если можно - пожалуйста, приведите примеры, применительно к моему вопросу.
Vladimir Kheifets
Отправлено: 08 Ноября, 2022 - 18:08:16
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
LML пишет:
ALEN пишет:
https://www.php.net/manual/en/fu...ace-callback.php в замыкании делишь строку по пробелу, регуляркой не нужно (более дорогая), достаточно explode и потом получив случайное число от 0 до количества элементов в коллекции вытаскиваешь этот рандомный элемент и возвращаешь в строку
preg_replace_callback, действительно интересная функция. Но по ней что-то совсем мало информации, чтобы разобраться. Максимум, что у меня с ней получилось - это выбирать цвет.
Что-то я никак не могу понять, как правильно её применять.
Если можно - пожалуйста, приведите примеры, применительно к моему вопросу.
Добрый день!
Верно, регуляркой не нужно (более дорогая), только вот функция preg_replace_callback это тоже регулярка. Попробуйте так (проверял на PHP 8.1)
Железнодорожный {светофор|семафор} имеет {красный|жёлтый|зелёный|синий|белый} свет свечения.
$outStr:
Железнодорожный семафор имеет зелёный свет свечения.
Железнодорожный семафор имеет белый свет свечения.
Железнодорожный светофор имеет красный свет свечения.
...
*/
?>
Удачи!
LML
Отправлено: 08 Ноября, 2022 - 20:25:59
Новичок
Покинул форум
Сообщений всего: 24
Дата рег-ции: Февр. 2021
Помог: 1 раз(а)
Vladimir Kheifets пишет:
Добрый день!
Верно, регуляркой не нужно (более дорогая), только вот функция preg_replace_callback это тоже регулярка. Попробуйте так (проверял на PHP 8.1) Удачи!
И всё же, на preg_replace_callback не будет ли лучше?
Хотелось бы с этой функцией тоже разобраться.
Vladimir Kheifets
Отправлено: 08 Ноября, 2022 - 21:29:52
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
LML пишет:
Vladimir Kheifets пишет:
Добрый день!
Верно, регуляркой не нужно (более дорогая), только вот функция preg_replace_callback это тоже регулярка. Попробуйте так (проверял на PHP 8.1) Удачи!
И всё же, на preg_replace_callback не будет ли лучше?
Хотелось бы с этой функцией тоже разобраться.
По саоему опыту, советую Вам в своих реальных проект не использовать неактуальные версии PHP.
Переделки обходятся не дешево и многие не хотят за них платить.
Покинул форум
Сообщений всего: 24
Дата рег-ции: Февр. 2021
Помог: 1 раз(а)
Vladimir Kheifets пишет:
По саоему опыту, советую Вам в своих реальных проект не использовать неактуальные версии PHP.
Переделки обходятся не дешево и многие не хотят за них платить.
Полностью с Вами согласен. Но.
То, что я делаю - это больше для себя. Скажем так - практические работы по самообразованию.
За этот проект мне никто ничего не платит, а плачу я сам за сервер.
Ну и самое главное, перевести проект даже на версию выше 5.6 - проблема из-за необходимости переписывать десятки (может даже сотни) обращений к базе из разных файлов. Вручную - это просто не стоит затраченного времени.
Как-то попробовал изменить файлы с mysql скриптом - легло всё
Больше и не пытаюсь.
Vladimir Kheifets
Отправлено: 09 Ноября, 2022 - 12:48:07
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
LML пишет:
Vladimir Kheifets пишет:
По саоему опыту, советую Вам в своих реальных проект не использовать неактуальные версии PHP.
Переделки обходятся не дешево и многие не хотят за них платить.
Полностью с Вами согласен. Но.
То, что я делаю - это больше для себя. Скажем так - практические работы по самообразованию.
За этот проект мне никто ничего не платит, а плачу я сам за сервер.
Ну и самое главное, перевести проект даже на версию выше 5.6 - проблема из-за необходимости переписывать десятки (может даже сотни) обращений к базе из разных файлов. Вручную - это просто не стоит затраченного времени.
Как-то попробовал изменить файлы с mysql скриптом - легло всё
Больше и не пытаюсь.
Добрый день!
Относительно сервера для обучения и каких-нибудь экспериментов.
Советую Вам установить на своём компе локальный сервер, например https://ospanel[dot]io/
Вы можете изменять конфигурацию сервера и тестировать свои скрипты на разных версиях PHP и MySQL и.т.п
По Вашей задаче.
Я переписал свой скрип так, чтобы он работал на PHP начиная 5.4 и до 8.1 без регулярок.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.