2014-01-11 264 views
0

我看到PHP的警告:提供的foreach无效参数()

Warning: Invalid argument supplied for 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']); 
     } 
    } 
} 
+0

如果你在foreach块之前做var_dump($ jobs_by_category),你会得到什么? – grim

+0

您是否检查了''$ jobs_by_category''的值?您应该使用类似''is_array($ jobs_by_category)'' – ub3rst4r

+0

来验证它的数组。假设它也可以是一个对象,除了@ ub3rst4r提到的is_array($ jobs_by_category)外,还可以使用is_object($ jobs_by_category)。 – grim

回答

0

哎呦,让我们尝试这再次

<?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; 
     } 

    } 
} 
?> 
+0

你怎么知道''$ job_items''是问题?他引用了迭代的问题''$ jobs_by_category'' – ub3rst4r

+0

看到我会想到的,但后来我想了一会儿,如果第一个循环不起作用,那么他不会写第二个循环。我打赌说有在某个地方的某个空值ray/object – Sparatan117

+0

@ Sparatan117我认为问题在于我没有连接到该函数依赖的其他函数。我使用全局$ category_name;但它似乎没有连接。 – user3135712

0
$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'); 
    } 
} 
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']); 
       } 
      } 
     } 
    } 

} 
?> 
相关问题