Печатать числа между двумя диапазонами в PHP?

Прямо сейчас я пытаюсь напечатать числа между двумя диапазонами: от 1 до 48 и от 114 до 118, используя цикл for. Я попробовал сделать следующее:

for ($y = 1; $y < 48; $y++) { }

Цикл правильно напечатал числа в диапазоне от 1 до 48. Но у меня нет четкого представления о том, как применить второй диапазон от 114 до 118 для печати чисел 115, 116 и 117 в другом диапазоне.

Я хочу напечатать числа как 1,2,3,..............45,46,47,115,116,117 Кто-нибудь может мне помочь в этом?

Можно сделать две петли for подряд. Также обратите внимание на range(). Посмотрите примеры.

KIKO Software 25.07.2024 08:48

Или манипулируйте переменной-счетчиком изнутри цикла... for ($y = 1; $y < 118; $y++) { if ($y == 48) { $y = 115; } echo $y, ", "; } (Обычно это не рекомендуется, потому что это может привести к неожиданному поведению при выполнении более сложных задач. Но для чего-то столь тривиального это сработает нормально.)

CBroe 25.07.2024 08:54

Вот простая фраза: echo implode(', ', [...range(1, 48), ...range(114, 118)]);. Демо: 3v4l.org/V4DjK Это неэффективно, но просто в использовании для небольшого количества диапазонов.

Markus Zeller 25.07.2024 09:17

Вы можете определить функцию и вызвать ее дважды: 3v4l.org/fRMAI

Olivier 25.07.2024 10:09

«числа между двумя диапазонами» вряд ли имеют смысл. Это может быть ЛИБО «диапазон между двумя числами», ИЛИ «из двух диапазонов». А цифры из этих диапазонов вам видимо НЕ нужны.

Your Common Sense 25.07.2024 11:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
93
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Один из способов: используйте условный оператор, чтобы напечатать то, что вы хотите включить.

<?php
for ($y=1; $y <= 118; $y++) {
  if (($y>=1 && $y<=48) || ($y>=115 && $y <=117)) {
   echo $y . " " ;
  } else {  
   // do nothing -- or other things you want
  }
}  
  ?>

Смотрите демо

Мне нравится иметь в своем коде 70 //do nothing циклов.

Arthur Boucher 25.07.2024 10:14

Этот принятый ответ не выводит число 118.

KIKO Software 25.07.2024 11:21

@KIKOSoftware, ОП дважды упомянул в своем вопросе, что последнее отображаемое число — 117 (а не 118), но он также прямо упомянул, что второй диапазон — от 114 до 118, но цифры, которые нужно напечатать, — только 115, 116, 117 (поэтому я включил блок else, чтобы он мог делать все, что захочет, для 114 и 118).

Ken Lee 25.07.2024 17:03
<?php 
  for ($y = 1; $y < 118; $y++) {
    if (($y >= 1 && $y < 48) || ($y >= 115 && $y < 118)) {
        echo $y . ",";
    }
  } 
?>

Благодарим вас за вклад в сообщество Stack Overflow. Возможно, это правильный ответ, но было бы очень полезно предоставить дополнительные пояснения к вашему коду, чтобы разработчики могли понять ваши рассуждения. Это особенно полезно для новых разработчиков, которые не так хорошо знакомы с синтаксисом или пытаются понять концепции. Не могли бы вы отредактировать свой ответ, включив в него дополнительную информацию на благо сообщества?

Jeremy Caney 26.07.2024 02:09

Для решения, которое одновременно эффективно и легко читается, вы можете использовать что-то вроде этого:

foreach ([...range(1, 48), ...range(114, 118)] as $number) {
    echo "$number ";
}

При этом используются range() , оператор ..., краткая запись массива и foreach.

Смотрите: https://3v4l.org/l8ril

Создание трех массивов не особенно эффективно...

Olivier 25.07.2024 11:23

@Оливье Оливье Ты совершенно прав. Два цикла for были бы более эффективными. Я противопоставлял комментарий Маркуса Целлера (см. вопрос), исключив функцию implode(). При всем при этом я не думаю, что здесь важна эффективность, важна читаемость.

KIKO Software 25.07.2024 11:25

Я использовал implode, потому что похоже, что ему нужен список, разделенный запятыми. Но если вам просто нужен пробел или новая строка, вариант implode все равно подойдет :) echo implode(PHP_EOL, [...range(1, 48), ...range(114, 118)]);. Цикл foreach добавит в конце дополнительный разделитель/пробел/новую строку, что может быть нежелательно.

Markus Zeller 25.07.2024 11:31

@Olivier В быстром тесте это решение выглядит эффективным (цикл 100 тыс.). Это хорошая идея и приятно появиться здесь среди других ответов.

bobble bubble 25.07.2024 12:21

@bobblebubble Проверьте это и увидите, что решение, которое я предложил в комментариях, более эффективно (и в то же время прекрасно читаемо).

Olivier 25.07.2024 12:36

Я как раз собирался это написать идея из вашего комментария выглядит наиболее эффективной (и читабельной, как вы говорите). Возможно, добавьте еще один ответ!

bobble bubble 25.07.2024 12:37

Другие вопросы по теме