在PHP中将“if-else”语句转换为循环?

在PHP中将“if-else”语句转换为循环?,php,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;

如何在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。

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

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

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

PHP实际上不知道1=1,所以不能使用循环对其进行迭代。
您必须向它提供此映射,无论是通过切换而不是加载ifs,还是创建数组映射。

循环对于您的问题来说完全是错误的构造

使用如下数组:

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

为什么不创建一个项目数组,作为“查找表”,其顺序如下:

$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
然后,如果项目以1开头,则$number可能需要减去1到$number,以此类推,以获得数组中使用的正确项目,从而获得没有循环的特定项目,如:

//$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/else的情况下有效地最小化代码,您需要具有一致的逻辑。

我认为这就是您的意思:

echo ${"file" . $number};
但这显示了$filen的变量,例如:$file1、file2等。如果要将其设置为数字,可以执行以下操作:

echo ${"file" . intToEnglish($number)};
echo $colour[number];
您可以自己制作intToEnglishint$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 ${"file" . intToEnglish($number)};
echo $colour[number];
-编辑2-- 这与检查有关:


你在找,$int=$number吗?这太抽象了,很难说,但你可能在找一个无聊的旧数组映射。不一定。我只需要将许多“elseif”语句转换成一个更简洁的循环。我只是不知道该使用哪个循环。不清楚为什么需要循环,除非你实际上在做比$int=更复杂的事情,如果你只是赋值,可能的范围是1..MAXINT简单赋值就足够了。为什么你需要任何If/else If语句?将一个变量分配给另一个变量有什么不对?$filetwo是一个实际变量,一个将显示的实际文件。不仅仅是文字。就像我说的,这个概念就是我需要的,忘记字符串和整数。我说的是显示变量,而不是字符串或整数。@user3747660-变量包含字符串和整数。我认为您需要回溯并学习编程的基本知识。您将$number与字符串关联,然后对其进行回显。这不是我需要的,而且是糟糕的编程。您不能呼出$number,然后在其上附加您拥有的内容。如果我像在问题中那样重命名变量,您的答案将完全不准确。我已经学会了编程的基础知识。如果这么简单,为什么不帮助有需要的人呢?我将发布另一个问题,以及我正在使用的实际代码,这是数组的一部分。这将使每个人都更容易。切换与“else-if”语句非常相似。如果$number等于10000,我不能手动写出10000个开关案例,直到它发现$number=10000。这样就可以了:就像我回复了大约10个人一样,我不需要数字到字符串或字符串到数字的转换。我在问题中问过这个吗?没有。那为什么每个人都给我转换链接呢?好吧,如果你想要的东西中没有逻辑,你就不能用它在循环中迭代,但你可以在前面定义它,可以用数组映射、开关或枚举器类,就像这里的逻辑:while$i!==$数字我之前提到过$number不是一个静态数字。它可以是1到无穷大之间的任何数字。它只需要遍历所有可能的数字,然后当找到匹配项时,它输出一个变量。您知道while函数是什么吗?如果您将99999999999999放入$number,它将循环99999999999次。没错。所以我需要遍历$number,直到它发现$number是什么
对。while函数只会在找不到$number等于什么的情况下执行此操作。问题是,$number不断变化,我不知道如何使用while循环实现这一点。@user3747660如果您已经在$number中存储了一个值,为什么您觉得需要一个循环来确定它等于什么?在您的场景中,一旦$i达到$number的值,会发生什么情况?现在,您有两个具有相同值的变量,那么此时您打算如何处理它们?不要用新问题重新发布,只需编辑上面的问题即可。
while($i <= $number) { 
    if($i === $number) { echo $colour[number]; } 
    else { echo 'Checking'. $i; }
}