Foreach循环不像许多if语句那样

时间:2014-03-19 23:40:03

标签: php foreach

所以我在PHP中有一系列if语句生成了一些输出 - 代码工作正常 - 然后我尝试创建一个foreach循环来合并代码,但输出方式不同。并非所有字段都会一直输出,并且在输出信息时舍入不同。

示例位于http://pagliocco.com/ManaCalcTest.php

代码段位于

之下
$output = array(
            $forest => " Forests", 
            $island => " Islands", 
            $mountain => " Mountains", 
            $swamps => " Swamps", 
            $plains => " Plains");

foreach ($output as $value => $landName){
    if(round($value) > 0) {
        echo round($value) ." ". $landName ."<BR>";
    }
}

echo "<BR><BR>";

if(round($forest) > 0)
{
echo round($forest);
echo " Forests";
echo "<BR>";
}
if(round($island) > 0)
{
echo round($island);
echo " Islands";
echo "<BR>";
}
if(round($mountain) > 0)
{
echo round($mountain);
echo " Mountains";
echo "<BR>";
}
if(round($plains) > 0)
{
echo round($plains);
echo " Plains";
echo "<BR>";
}
if(round($swamps) > 0)
{
echo round($swamps);
echo " Swamps";
echo "<BR>";
}

1 个答案:

答案 0 :(得分:3)

问题在于如何定义输出数组:

$output = array(
        $forest => " Forests", 
        $island => " Islands", 
        $mountain => " Mountains", 
        $swamps => " Swamps", 
        $plains => " Plains"
);

我假设这是关于M:TG并且那些变量具有整数值。当这些值不唯一时,您最终要做的是将相同的键多次推入阵列。当你这样做时,最后一个键按下“wins”,之前按下的键的值就会丢失。

例如,如果$plains == 0,那么您的数组将具有与键" Plains"关联的值0,并且出现零次的所有其他类型的基本区域将不在数组中一点都不您可以使用var_dump($output)确认这一点。

解决方案当然是向后做法:使用你知道唯一(基本地名)作为键的值,以及每个值作为值的数量。

$output = array(
        "Forests" => $forest, 
        "Islands" => $island, 
        // etc
);

foreach ($output as $landName => $value) ...