如何简化嵌套循环?

时间:2019-05-03 02:55:46

标签: php loops foreach

我目前正在遍历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 个答案:

答案 0 :(得分:2)

我相信您可以这样做:

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

但是,我仍然无法获得您尝试创建的模式...

答案 1 :(得分:1)

另一种更有效的方法是一次创建整个范围。然后使用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;
    }
}