仅在PHP中将switch语句转换为1

问题描述 投票:-2回答:1

我正在尝试打印1到50之间的数字。对于3的倍数,它应该打印“ 3的倍数”。对于5的倍数,应打印“ 5的倍数”。对于3和5的倍数,应该为其他数字打印“ 3和5的倍数”,应该打印该数字。

我使用switch尝试了以下代码,它正在工作。但我不能使用switch,三元运算符或else语句。

下面是我的代码-

function findMultiples($n)  
{  
    $three = 3; // To keep track of multiples of 3  
    $five = 5; // To keep track of multiples of 5

    for ($i = 1; $i <= $n; $i++)  
    {  
        switch ($i) {
        case $i%$three==0 and $i%$five==0:
            echo "multiple of 3 and 5 both";
            break;
        case $i%$three==0:
            echo "multiple of 3";
            break;
        case $i%$five==0:
            echo "multiple of 5";
            break;
        default:
            echo $i;
        }

        echo "<br/>";
    }  

}  

// Driver Code 
findMultiples(50);  //I am getting expected result.

如果在开关所在的位置有条件,我如何通过使用以下方法获得此结果

$printNumbers = "";

if (($i%$three==0 and $i%$five==0) or ($i%$three==0) or ($i%$five==0))    
{  
    $printNumbers = $i;
}  

echo $printNumbers;
php php-7
1个回答
1
投票

一个有点奇怪的问题,但是如果您只需要一个IF,则可以同时使用比较和赋值以实现它:

<?php
    function findMultiples($n) {
        $three = 3; // To keep track of multiples of 3
        $five = 5; // To keep track of multiples of 5

        for ($i = 1; $i <= $n; $i++) {
            if (($i % $three == 0 and $i % $five == 0 and $text = 'both 3 and 5') or ($i % $three == 0 and $text = '3') or ($i % $five == 0 and $text = '5') or ($text = 'none')) {
                echo $i.' is divided by '.$text;
            }
            echo '<br>';
        }
    }

    findMultiples(50);

输出:

1 is divided by none
2 is divided by none
3 is divided by 3
4 is divided by none
5 is divided by 5
6 is divided by 3
7 is divided by none
8 is divided by none
9 is divided by 3
10 is divided by 5
11 is divided by none
12 is divided by 3
13 is divided by none
14 is divided by none
15 is divided by both 3 and 5
16 is divided by none
17 is divided by none
18 is divided by 3
19 is divided by none
20 is divided by 5
21 is divided by 3
22 is divided by none
23 is divided by none
24 is divided by 3
25 is divided by 5
26 is divided by none
27 is divided by 3
28 is divided by none
29 is divided by none
30 is divided by both 3 and 5
31 is divided by none
32 is divided by none
33 is divided by 3
34 is divided by none
35 is divided by 5
36 is divided by 3
37 is divided by none
38 is divided by none
39 is divided by 3
40 is divided by 5
41 is divided by none
42 is divided by 3
43 is divided by none
44 is divided by none
45 is divided by both 3 and 5
46 is divided by none
47 is divided by none
48 is divided by 3
49 is divided by none
50 is divided by 5

如果需要,可以随意更改打印的文本。


-1
投票

我认为这不是最佳解决方案,但是也可以使用三元运算符来解决此问题,如果结果的值不为零,则触发if条件,请看一下:

function findMultiples($n)  
{  
$three = 3; 
$five = 5; 

for ($i = 1; $i <= $n; $i++)  
{  
      echo $i;
      $result = $i%3 == 0 && $i%5==0 ? "multiple of 3 and 5 both" : ($i%3 == 0 ? "multiple of 3" : ($i%5 == 0 ? "multiple of 5" : 0));

      if($result)
         echo " is multiple of ".$result;

    echo "<br/>";
}  

} 

findMultiples(50);

输出:

1
2
3 is multiple of multiple of 3
4
5 is multiple of multiple of 5
6 is multiple of multiple of 3
7
8
9 is multiple of multiple of 3
10 is multiple of multiple of 5
11
12 is multiple of multiple of 3
13
14
15 is multiple of multiple of 3 and 5 both
16
17
18 is multiple of multiple of 3
19
20 is multiple of multiple of 5
21 is multiple of multiple of 3
22
23
24 is multiple of multiple of 3
25 is multiple of multiple of 5
26
27 is multiple of multiple of 3
28
29
30 is multiple of multiple of 3 and 5 both
31
32
33 is multiple of multiple of 3
34
35 is multiple of multiple of 5
36 is multiple of multiple of 3
37
38
39 is multiple of multiple of 3
40 is multiple of multiple of 5
41
42 is multiple of multiple of 3
43
44
45 is multiple of multiple of 3 and 5 both
46
47
48 is multiple of multiple of 3
49
50 is multiple of multiple of 5
© www.soinside.com 2019 - 2024. All rights reserved.