2011-09-20 193 views
1

如何修复以下错误Message: Invalid argument supplied for foreach() - Line Number: 28foreach为foreach提供的参数无效()

<?php 
$mileage = array(); 
$mileage_input = $this->input->post('mileage'); 
foreach ($mileage_input as $idx => $name) { //Line 28 
    $mileage[] = array(
     'mileage' => $mileage_input[$idx] 
    ); 
} 
$data = array(
    'mileage' => json_encode($mileage), 
    'customer_number' => $customer_number, 
    'name' => $this->input->post('name') 
); 
$this->db->insert('customer', $data); 
?> 
+0

尝试'var_dump($ mileage_input)'看看你会得到什么。如果你没有得到一个数组,那么它将无法工作。 –

+3

“里程”字段必须在html表单中命名为“mileage []”,例如''input type =“text”name =“mileage []”...>',否则PHP将不会自动将其转换为_POST/_GET数组中的数组。 –

+1

[为foreach()提供的无效参数的可能的重复)(http://stackoverflow.com/questions/2630013/invalid-argument-supplied-for-foreach) –

回答

7

$mileage_input可能不是一个数组,这就是为什么它不工作。

1

最有可能的$ mileage_input不是数组。 也许你必须错误检查$ this-> input-> post。

如果你不真的关心错误,但只是不想得到错误,你可以在循环之前将值转换为数组。

foreach((array)$mileage_input as $idx => $name { 
+5

把灰尘藏在地毯下不会让你的房子更清洁。 –

+1

很多时候你可以从例如NULL传递给你的函数,在这种情况下,你不想做循环通常做的事情。将NULL转换为数组会给出一个空数组,因此foreach中将不会运行循环。我发现它不时很有用。 –

+2

在这种情况下,只需对所定义的变量进行显式检查,而不是null。或者,更好的是,如果函数需要一个数组,则向它传递一个数组(即使它是空的)。 –

相关问题