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

How to conditionally perform math within a loop?

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

逻辑是奇数出现不加修改打印,但偶数出现平方(乘以自己)。

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.

我想要的结果(如果迭代 16)是:

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

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

for ($i = 1; $i < 6; $i += 2) {
    echo $i . " " . (($i+1) * ($i+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

<?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