如果Statement在foreach循环中只显示一次

时间:2013-01-05 20:10:54

标签: php loops if-statement foreach

我对PHP中的foreach循环有疑问。 出于某种原因,我似乎只是以这种方式回到了最后一条回路,我迷失在这个问题所在的地方。每当我在foreach循环内部和IF语句之外的echo中检查$ onderdeeltje [1]和$ selectedmodel时,它会完美地将它们全部粘贴而没有任何问题。它还表明它们是相同的,并且应该在IF语句上作出反应。一旦我比较两个内部IF语句,它只显示最后一个。每当我删除复选框echo并将其替换为echo“test”等任何内容;它也让我只测试一次。有人可以对此有所了解吗?我在同一页面中有多个(2 +这一个)foreach循环,它们完美地工作但只有这个似乎有bug。

echo "<form method='post' action='formpie.php'>";

$onderdelen = file("onderdelen.txt");

foreach ($onderdelen as $onderdeel) 
{
    $onderdeeltje = explode(",", $onderdeel);

    if ($onderdeeltje[1] == $selectedmodel)
    {
        echo "<input type='checkbox' name='check_list[]' value='$onderdeeltje[0]'>$onderdeeltje[0]<br>";
    }
}

echo "</form>";

$ selectedmodel将是:iPhone 3G和文本列表是这样的:

Reparatie touchscreen €41.50,iPhone 3G
Reparatie Wi-Fi-antenne €50.00,iPhone 3G
Reparatie trilmodule €40.00,iPhone 3G
Reparatie sim slot €70.50,iPhone 3G
Reparatie oorluidspreker €46.00,iPhone 3G

它只显示:Reparatie oorluidspreker€46.00作为复选框。

请帮帮我! :)提前致谢!

----------------------------------------------- --------------

如何解决:

如果在每行使用<br>之类的内容粘贴这些内容,或者在我的情况下是重复的表单复选框值列表,则输出中可​​能存在不可见的隐藏空格。

要解决此问题,您只需修改IF等语句之前或之内的值,如下所示:

foreach ($onderdelen as $onderdeel) 
{
    $onderdeeltje = explode(",", $onderdeel);

    if (trim($onderdeeltje[1]) == $selectedmodel)
    {
        echo "<input type='checkbox' name='check_list[]' value='$onderdeeltje[0]'>$onderdeeltje[0]<br>";
    }
}

感谢ZombieSpy的支持。

1 个答案:

答案 0 :(得分:0)

正如Marc B所说,你可能有换行符,所以使用 str_replace

echo "<form method='post' action='formpie.php'>";

$onderdelen = file("onderdelen.txt");

foreach ($onderdelen as $onderdeel) 
{
    $onderdeeltje = explode(",", $onderdeel);

    if (str_replace ("\n", "", $onderdeeltje[1]) == $selectedmodel)
    {
        echo "<input type='checkbox' name='check_list[]' value='$onderdeeltje[0]'>$onderdeeltje[0]<br>";
    }
}

echo "</form>";