【问题标题】:php warning: Invalid argument supplied for foreach() [duplicate]php 警告:为 foreach() 提供的参数无效 [重复]
【发布时间】:2014-01-30 06:46:50
【问题描述】:

我明白了

警告:为 foreach() 提供的参数无效

这行:foreach ($jobs_by_category as $category_name => $job_items) 这是我的其余代码。

function display_job_list ()
{       
    global $db;
    global $jobs_by_category;
    global $category_name;
    global $job_items;
    global $item;

    foreach ($jobs_by_category as $category_name => $job_items)
    {
        // display job category
        output_div ('job_category', $category_name);
        // print_r($category_name);
        // browse through job items
        foreach ($job_items as $item)
        {
            // output the 3 fields of this item
            output_div ('job_qty'        , $item['item_quantity'   ]);
            output_div ('job_unit'       , $item['item_unit'       ]);
            output_div ('job_description', $item['line_description']);
        }
    }
}

【问题讨论】:

  • 如果在 foreach 块之前执行 var_dump($jobs_by_category) 会得到什么?
  • 你检查$jobs_by_category的值了吗?您应该使用 is_array($jobs_by_category) 之类的东西来验证它是一个数组
  • 假设它也可以是一个对象,您可以使用 is_object($jobs_by_category) 除了@ub3rst4r 提到的 is_array($jobs_by_category) 。
  • 可能是你的数组是空的尝试先打印整个数组
  • @grim 在 var_dump($jobs_by_category)之后我得到了 NULL

标签: php foreach


【解决方案1】:

你必须确保变量在foreach之前是数组。

function display_job_list ()
{

    global $db;
    global $jobs_by_category;
    global $category_name;
    global $job_items;
    global $item;

    if (is_array($jobs_by_category)){
        foreach ($jobs_by_category as $category_name => $job_items)
        {
            // display job category
            output_div ('job_category', $category_name);
            //print_r($category_name);
            // browse through job items
            if (is_array($job_items)){
                foreach ($job_items as $item)
                {
                    // output the 3 fields of this item
                    output_div ('job_qty'        , $item['item_quantity']);
                    output_div ('job_unit'       , $item['item_unit']);
                    output_div ('job_description', $item['line_description']);
                }
            }
        }
    }

}
?>

【讨论】:

    【解决方案2】:

    哎呀,让我们再试一次

        <?php 
        function display_job_list ()
        {
    
            global $db;
            global $jobs_by_category;
            global $category_name;
            global $job_items;
            global $item;
    
            foreach ($jobs_by_category as $category_name => $job_items){
        // display job category
            output_div ('job_category', $category_name);
        //print_r($category_name);
        // browse through job items
            if(!empty($job_items)){
                foreach ($job_items as $item)
                {
        // output the 3 fields of this item
                    output_div ('job_qty'        , $item['item_quantity'   ]);
                    output_div ('job_unit'       , $item['item_unit'       ]);
                    output_div ('job_description', $item['line_description']);
                }
            }
            else{
                continue;
            }
    
        }
    }
    ?>
    

    【讨论】:

    • 你怎么知道$job_items是问题所在?他提到了迭代$jobs_by_category的问题
    • 看我会这么想,但后来我想了想,如果第一个循环不起作用,那么他就不会写第二个循环。我打赌该数组/对象中某处有一个空值
    • @Sparatan117 我认为问题在于我没有连接到该函数所依赖的其他函数。我使用了全局 $category_name;等,但它似乎没有连接。
    • 我注意到您没有将任何变量传递给函数。传进去不是更容易吗?
    【解决方案3】:
    $jobs_by_category = array();
    some_code;
    some_other_code;
    
    function display_job_list ()
    {
    
        :
        global $jobs_by_category;
        :
        if count($jobs_by_category > 0) {
           foreach ($jobs_by_category as $category_name => $job_items)
           {
               // processing code
               :
           }
        }
        else {
           print_a_message('No records to process');
        }
     }
    

    【讨论】:

      猜你喜欢
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      相关资源
      最近更新 更多