Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php If语句在foreach循环中仅显示一次_Php_Loops_If Statement_Foreach - Fatal编程技术网

Php If语句在foreach循环中仅显示一次

Php If语句在foreach循环中仅显示一次,php,loops,if-statement,foreach,Php,Loops,If Statement,Foreach,我有一个关于PHP中foreach循环的问题。 出于某种原因,我似乎只得到最后一行回音的方式,我迷失在这个问题所在。每当我在foreach循环内部和IF语句外部的echo中检查$onderdeltje[1]和$selectedmodel时,它都会完美地粘贴它们,没有任何问题。它还表明它们是相等的,并且应该对IF语句作出反应。。当我比较两个IF语句时,它只显示最后一个。每当我删除echo复选框并将其替换为echo“test”之类的内容时;它也只显示了一次测试。有人能解释一下吗?在同一个页面中,我有

我有一个关于PHP中foreach循环的问题。 出于某种原因,我似乎只得到最后一行回音的方式,我迷失在这个问题所在。每当我在foreach循环内部和IF语句外部的echo中检查$onderdeltje[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>";
它仅显示:Reparatie oorluidspreker€46.00作为复选框

请帮帮我!:)提前谢谢

------------------------------------------------------------- 如何解决:

如果在每行粘贴

之类的内容,或者在我的例子中是重复表单复选框值的列表,则输出中可能存在不可见的隐藏空格

要解决此问题,只需在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>";
    }
}
foreach($onderdelen作为$onderdel)
{
$onderdeeltje=爆炸(“,”,$onderdeel);
if(trim($onderdeltje[1])==$selectedmodel)
{
回显“$OnderDeltje[0]
”; } }

多亏了ZombieSpy的支持,问题得以解决。

正如Marc B所说,您可能有换行符,所以请使用stru替换

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>";
echo”“;
$onderdelen=文件(“onderdelen.txt”);
foreach($onderdelen作为$OnDerdele)
{
$onderdeeltje=爆炸(“,”,$onderdeel);
如果(str_replace(“\n”,”,$onderdeltje[1])==$selectedmodel)
{
回显“$OnderDeltje[0]
”; } } 回声“;
file()
仍将在每行末尾保留换行符,因此实际上您要比较的是
iphone3g\n
。最后一行可能没有换行符,所以您确实匹配了。请阅读我对ZombieSpy评论的评论。谢谢你的帮助@基文:请不要在标题中添加
[solved]
。你已经接受了答案,这就是所需要的。我们可以从主屏幕上看到它已被解决。我明白了,注意到。这对通过谷歌搜索已解决的答案的人没有帮助吗?:)它显示页面标题,但不显示当前状态,这或多或少就是我这么做的原因。@Kevin G可能会将标题更改为与问题更相关的内容?比如“文件数组中的字符串不是它所期望的那样”之类的?基于Marc B的评论,我也尝试过这个方法,但它就是不想工作。我试了两种方法。。为了以防万一,替换OnDerDeltJe[1]和$selectedmodel,因为两者都来自列表。。但是不行。同样,它只显示最后一个:(奇怪的是,这个完全相同的处理在它正上方的foreach循环中工作,也使用分解的字符串拆分并从文本文件中读取,为什么这在这个循环中是个问题,而不是在之前的循环中?那个循环工作得很好。让我们了解一下我的意思:我在它上面有一个完全相同的代码块,用于获取基于select的模型。)从一个名为models.txt的文本文件中删除模型,这些模型的结构如下:modelname,brand如果你回音两边,它们看起来一样吗?其中是否有一个空格是邪恶的?尝试删除两个字符串中的所有空格
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>";