如何在循环中有条件地执行数学运算?

时间:2018-06-25 17:20:14

标签: php loops math conditional increment

我想使用循环打印一系列条件修改的数字。

逻辑是,奇数出现未经修改就被打印,而偶数出现则被平方(乘以它们本身)。

for ($i=1; $i < 6 ; $i++) { 
    echo $i;
    for ($j=1; $j==$i ; $j++) { 
        echo ($j+1) * ($j+1);
    }
    echo " ";
}

上面的代码打印:14 2 3 4 5

我期望的结果(如果通过1迭代6)是:

//    unmodified
//    ↓   ↓    ↓
      1 4 3 16 5 36
//      ↑   ↑↑   ↑↑
//      squared (2, 4, and 6)

3 个答案:

答案 0 :(得分:2)

您需要从1开始,并在循环中每次添加2。偶数元素是该数字后面的数字的平方。所以:

for ($i = 1; $i < 6; $i += 2) {
    echo $i . " " . (($i+1) * ($i+1)) . " ";
}

您不需要内部循环。

答案 1 :(得分:1)

使用%

的另一种方法
<?php
$result = [];
for ($i=1; $i < 6 ; $i++) { 
    if($i%2==0){
        $result[] = pow($i,2);
    }else{
        $result[] = $i;
    }
}
echo implode(' ', $result);
?>

程序输出

1 4 3 16 5

演示: https://eval.in/1027936

答案 2 :(得分:1)

<?php

for($i=1; $i<=6; $i++)
    echo $i&1 ? $i : $i*$i , ' ';

因为您可以确定第n个项,所以我们可以编写一个函数来获取第n个数字:

function ajeet_number($n) {
    return $n&1 ? $n : $n*$n;
}

并在循环中使用它:

for($i=1; $i<=6; $i++)
    echo ajeet_number($i) . ' ';

或将该函数应用于一系列数字:

$s = array_map('ajeet_number', range(1,6));
echo implode(' ', $s);

上面的每个输出都是相似的:

1 4 3 16 5 36 

参考:Test if number is odd or even