将'if else'语句转换为PHP中的循环?

时间:2015-01-22 01:54:04

标签: php

如何在PHP中将其转换为循环?

$number = 4; // This number is unknown and can be any number.

if ($number === 1) {
    echo $red;
} else if ($number === 2) {
    echo $yellow;
} else if ($number === 3) {
    echo $orange;
} else if ($number === 4) {
    echo $black;
} else if ($number === 5) {
    echo $green;
} else if ($number === 6) {
    echo $grey;
} else if ($number === 7) {
    echo $brown;
} else if ($number === 8) {
    echo $blue;
} else if ($number === 9) {
    echo $silver;
} else if ($number === 10) {
    echo $gold;
} else if ($number === 11) {
    echo $white;
} 

etc...

现在$ number可以是任意数字,所以我必须以某种方式循环从1到无限的数字,直到它找到$ number等于。在这种情况下,数字等于4.

5 个答案:

答案 0 :(得分:1)

我不确定你为什么要这样做,但是:

$i = 1;
while ($i !== $number) {
    $i++;
}
$int = $i;

答案 1 :(得分:0)

要做你想做的事,你应该使用一个数组映射,但是一个开关也可以做到这一点。

PHP实际上并不知道1 = 1,因此您无法通过循环迭代它。 您必须提供此映射,无论是通过切换而不是加载ifs,还是创建数组映射。

答案 2 :(得分:0)

Loop完全是你问题的错误构造。

使用如下数组:

<?php
$number = 2;
$english = array("zero","one","two","three","four");
echo "file" . $english[$number];
?>

显示filetwo

OP编辑后,一切都变得清晰 - 尝试: -

 <?php
    $number = 2;
    $red = "crimson";
    $clear = "glass";
    $yellows = array("gold","lemon","acid","ochre");
    $orange = "tangerine";
    $black = "charcoal";
    $objects = array(&$clear,&$red,&$yellows,&$orange,&$black);

    var_dump( $objects[$number] );

?>

输出:

array(4) { [0]=> string(4) "gold" [1]=> string(5) "lemon" [2]=> string(4) "acid" [3]=> string(5) "ochre" }

答案 3 :(得分:0)

为什么不创建一个作为“查找表”的项目数组。在顺序需要:

$items = ['item_1', 'item_2', 'item_3', … 'item_n'];

或有一串项目,如:

$items = explode('|', 'item_1|item_2|item_3|item_n');
//| being the delemiter or what ever might not occur inside any items

然后让你的$number(可能需要减去1到$number,如果项目以1开头,依此类推以获得正确的项目)在数组中使用以获得特定项目,而不是像下面这样的循环:

//$number = 3
$number--;
echo $items[$number];//echos 'item3'

但似乎你似乎想要这样的东西:

//$number = 3
$items = explode('|', 'red|pink|gold|invisible');
echo ${$items[$number - 1]};
//translates into `echo $gold;`
//echos whatever is in $gold

阅读你的一些评论似乎你可能最好重新考虑你的逻辑/变量并使用数组而不是可能有数百个不同命名的变量,每次都必须检查这些变量无法转换进入一个像你希望的那样简单的循环。唯一的另一个可能是使用像许多变量变量,包括我,已经提到但你似乎把它们击落了。我不会亲自推荐变量变量,但它可能会加快时间而不需要进行任何循环。为了有效地最小化代码而不需要许多if / elses,您需要具有一致的逻辑。

答案 4 :(得分:0)

我认为这就是你的意思:

echo ${"file" . $number};

但是这显示了$ filen的变量,例如:$ file1,file2等。如果你想把它作为数字,你可以这样做:

echo ${"file" . intToEnglish($number)};

您可以自己制作intToEnglish(int $ number)或需要我们寻求帮助吗?

我不太清楚为什么你需要循环这个,但如果你真的需要循环这个,你可以试试这个:

$i = 0;
while ($i !== $number) {
    $i++;
} 
echo ${"file" . intToEnglish($i)};

但是,请确保echo ${"file" . intToEnglish($number)};存在,否则您将经历无限循环。

- 编辑 -

已编辑的颜色变量大小写就是这种情况。如果你想简化(循环),你可以改变你的变量如何分配。示例:

$colour = array("green","yellow","red","blue","black");
$i = 0;
while ($i !== $number) {
    $i++;
} 
echo $colour[$i];

实际上,除非你有进程,否则循环并不是必需的。您可以像这样直接定义它:

echo $colour[number];

- 编辑2 --- 这是检查的事情:

while($i <= $number) { 
    if($i === $number) { echo $colour[number]; } 
    else { echo 'Checking'. $i; }
}