Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/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 Foreach循环未按预期输出数组_Php_Arrays_Foreach - Fatal编程技术网

Php Foreach循环未按预期输出数组

Php Foreach循环未按预期输出数组,php,arrays,foreach,Php,Arrays,Foreach,我有一个叫做Thread_category的对象。这有一个名为find_all_by_category$category的方法,它输出一个包含category$category的线程数组 我有一个数组$category\u array\u用于这个线程,它输出: Array ( [0] => Allergic diseases [1] => Allergic asthma [2] => Congenital lung disease [3] => Idiopathic pu

我有一个叫做Thread_category的对象。这有一个名为find_all_by_category$category的方法,它输出一个包含category$category的线程数组

我有一个数组$category\u array\u用于这个线程,它输出:

Array ( [0] => Allergic diseases [1] => Allergic asthma [2] => Congenital lung disease [3] => Idiopathic pulmonary fibrosis ) 
现在,如果我这样做

    $test1 = Thread_category::find_all_by_category('Allergic diseases');
    print_r($test1);
    echo "<br/>";
    echo "<br/>";

    $test2 = Thread_category::find_all_by_category('Allergic asthma');
    print_r($test2);
    echo "<br/>";
    echo "<br/>";

    $test3 = Thread_category::find_all_by_category('Congenital lung disease');
    print_r($test3);
    echo "<br/>";
    echo "<br/>";

    $test4 = Thread_category::find_all_by_category('Idiopathic pulmonary fibrosis');
    print_r($test4);
    echo "<br/>";
    echo "<br/>";
        foreach($category_array_for_this_thread as $category){
                    echo $category . "<br/>";
        $test_array = Thread_category::find_all_by_category($category);
        print_r($test_array);
        }
但是

如果我这样做

    $test1 = Thread_category::find_all_by_category('Allergic diseases');
    print_r($test1);
    echo "<br/>";
    echo "<br/>";

    $test2 = Thread_category::find_all_by_category('Allergic asthma');
    print_r($test2);
    echo "<br/>";
    echo "<br/>";

    $test3 = Thread_category::find_all_by_category('Congenital lung disease');
    print_r($test3);
    echo "<br/>";
    echo "<br/>";

    $test4 = Thread_category::find_all_by_category('Idiopathic pulmonary fibrosis');
    print_r($test4);
    echo "<br/>";
    echo "<br/>";
        foreach($category_array_for_this_thread as $category){
                    echo $category . "<br/>";
        $test_array = Thread_category::find_all_by_category($category);
        print_r($test_array);
        }
我能看到的唯一区别是第二个在foreach循环中。有人能解释为什么我得到3个空数组吗

这里是方法

       public static function find_all_by_category($category) {
    return self::find_by_sql("SELECT * FROM thread_category WHERE category='{$category}'");

}

在foeach循环中,您的$category只有一个值,而其他3个值可能为空,或者有其他任何在搜索时未返回结果的值。

数组的第二个元素具有该值,但您需要它来进行搜索。这可能会使find_all_by_category函数关闭-这解释了为什么第二个元素为空,在没有找到匹配项后,函数可能会执行一些奇怪的操作?

感谢编辑Floris。您的“按类别查找所有”方法是否可以访问全局变量$category或$category\u array\u以获取此线程?您是否可以回显$category以查看其生成的内容?可能会显示更多代码的上下文?Johnny如果我echo$category我得过敏性疾病过敏性哮喘先天性肺病特发性肺纤维化如果你使用不同类型的循环和索引值呢?编辑:可能会回显您的sql。如果您将单个值传递到方法中,如图所示,则会输出一个数组,即有一个结果。但是当从foreach循环输出时。我知道我忽略了一些明显的逻辑点,但就是看不到……哦!亲爱的find_all_by_category搜索准确的单词。明白了吗?如果我在foreach循环中输出$category,我会得到过敏性疾病过敏性哮喘先天性肺病特发性肺纤维化,即确切的单词。这些与上面给出的示例中单独执行时传递到方法中的相同,而不是foreach循环,因此这不是答案……您得到了哮喘的结果,但正如foreach循环第二次迭代中的$category一样,存在过敏性哮喘,您得到了空数组。另一方面,你们得到了单独的结果,也在foreach中得到了结果,因为foreach在第一次迭代时精确的单词出现了,但在其他三次迭代时精确的单词不存在……我仍然想知道你们的数组中是否有你们不知道的不可见字符、空格等。尝试回显“.$category.”。;。也放上四行,比如打印、阅读、分类:按“过敏性哮喘”分类查找所有内容;就在你的圈子里。函数调用对硬连线变量有效吗?因为如果它包含,就意味着你的变量不包含你的想法。否则我就没有主意了!我刚刚在循环中添加了$category的echo,以显示传入的内容。据我所知,这两个例子中的$category是相同的……啊!