【问题标题】:Ongoing unexplainable output from a foreach loop来自 foreach 循环的持续无法解释的输出
【发布时间】:2014-04-18 15:09:08
【问题描述】:

好的,所以我早些时候发布了这个问题,但仍然没有答案。不过,我很感激这些尝试。

Foreach loop not outputting arrays as expected

我已尝试缩小范围。我需要知道使用explode 从字符串创建的数组是否在某种程度上不同于$foo = array(.....) 指定的数组。拿这个代码

   $category_array = array('Pulmonary sarcoidosis', 'Acute critical care', 'Congenital lung disease');

    foreach($category_array as $category){
                $result = Thread_category::find_all_by_category($category);
                foreach ($result as $result_array){
                echo $result_array->thread_id;
                echo "<br/>";
                }
            }

    ?>

产量:

145 146 149 151

144 148 150 151

145 147 148 149 151

这是正确的。但是创建的数组如下...

    $category_array = explode(",", $thread->category);

当输出时给出

Array([0] => 肺结节病 [1] => 急性重症监护 [2] => 先天性肺病)

但是当通过 foreach 循环时...

145 146 149 151

它在第一个循环之后停止......

不知道为什么,花了好几个小时输出所有内容.....

我知道这里有代码我没有解释,但我认为问题必须发生在爆炸级别......请帮助!

【问题讨论】:

  • 请不要转发问题。
  • 您确定您的类别数组没有前导/尾随空格以及逗号?也许试试$category_array = array_map('trim', explode(",", $thread-&gt;category));

标签: php arrays foreach


【解决方案1】:

请运行此程序并告诉我们回声计数的含义。

$category_array = explode(",","Pulmonary sarcoidosis,Acute critical care,Congenital lung disease");

echo "category_array has ".count($category_array);

foreach($category_array as $category){
            $result = Thread_category::find_all_by_category($category);
            echo "result variable has ".count($result); 
            foreach ($result as $result_array){
            echo $result_array->thread_id;
            echo "<br/>";
            }
        }

?>

【讨论】:

  • category_array 有 3 个结果变量有 4 145 146 149 151 结果变量有 4 144 148 150 151 结果变量有 5 145 147 148 149 151
  • 它的空白。 $thread-category 给出.....肺结节病,急性重症监护,先天性肺病。当前面的空白被删除时,它就起作用了。我将explode语句更改为 $category_array = explode(", ", $thread->category);
  • 很高兴你解决了它。您还可以使用 trim($mystring) 删除前导和尾随空格。
  • 刚刚发布了我需要的添加行……你是明星……很生气,花了 4 个小时才解决这个问题。当我使用 === 比较两个数组时,结果表明它们是相等的,所以我真的被甩了....干杯伙伴
【解决方案2】:

你能确认一下吗

 Thread_category::find_all_by_category($category);

其中 $category 是一个不存在的类别,不会导致服务器错误?

如果是这样,我猜你在 $thread->category 中的数据比你预期的要多!

【讨论】:

  • 我明白你的意思,但我已经测试了 $category_array 的几个不同值,并且在所有情况下,它在第一个循环之后都会停止(这是正确完成的)。跨度>
【解决方案3】:

这是解决方案....

数组中每个值之前的空白是问题所在。因此解决方案是

    $category_array = explode(",", $thread->category);
    $category_array=array_map('trim',$category_array);
    foreach($category_array as $category){
        $result = Thread_category::find_all_by_category($category);
        foreach ($result as $result_array){
        echo $result_array->thread_id;
        echo "<br/>";
        }
        echo "<hr/>";
    }

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 2018-05-31
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多