Как упростить вложенные циклы? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть 2 диапазона, через которые я сейчас прохожу.

$arr1 = range(1500, 1505);
$start = 1;
$end = 10;

foreach ($arr1 as $block) {

  for ($i = $start; $i <= $end; $i++) {

    echo $block . $i; // output -> 15001,15002,15003 ... 15011, 15012 ...

  }

}

Есть ли более простой / эффективный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

Полагаю, вы можете сделать это так:

for($start = 15001; $start < 15061 ; $start = $start + 10 ) {
    $arr = range($start, $start + 8);
    $arr[] = $start * 10;
    echo implode(" ", $arr) . PHP_EOL;
}

Тем не менее, я все еще не понимаю шаблон, который вы пытаетесь создать ...

1 голос
/ 06 мая 2019

Еще один чуть более эффективный подход - создать весь диапазон за один раз. Затем используйте modulo, чтобы определить значения, кратные 10, и используйте математику, чтобы вывести желаемое альтернативное значение.

Пример: https://3v4l.org/L10Jq

foreach (range(15001, 15060) as $v) {
    if (0 === $v % 10) {
        echo ($v - 9) * 10 . \PHP_EOL;
    } else {
        echo $v . ' ';
    }
}

Результат:

15001 15002 15003 15004 15005 15006 15007 15008 15009 150010
15011 15012 15013 15014 15015 15016 15017 15018 15019 150110
15021 15022 15023 15024 15025 15026 15027 15028 15029 150210
15031 15032 15033 15034 15035 15036 15037 15038 15039 150310
15041 15042 15043 15044 15045 15046 15047 15048 15049 150410
15051 15052 15053 15054 15055 15056 15057 15058 15059 150510

Чтобы создать отдельный массив, передайте значение $v по ссылке, удалите вызовы echo и переназначьте значение в условном выражении.

$ar = range(15001, 15060);
foreach ($ar as &$v) {
    if (0 === $v % 10) {
        $v = ($v - 9) * 10;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...