1

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

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 equal 语句之前或内部修剪值,如下所示:

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 的支持解决了。

4

1 回答 1

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>";
于 2013-01-05T20:19:58.080 回答