我有一个foreach循环,用于将数组中的值添加到codeigniter中的函数中。当我将带有内容的值传递给此循环时,它不会改变。但是,当一个空值进入时,它会在数组中显示它之前的项的值。
以下是代码:
if(is_null($data['psc_opt_5'])){ echo "null"; }else{ echo $data['psc_opt_5']; }
foreach($data as $field => $value)
{
if(!is_null($value))
{
$this->db->where($field, $value);
}
else
{
$this->db->where($field." IS NULL");
}
}
if(is_null($data['psc_opt_5'])){ echo "null"; }else{ echo $data['psc_opt_5']; }
该数组包含psc_opt_1 - psc_opt_5。
有什么想法吗?
修改
第一个if语句证明psc_opt_5在循环之前为空,这里是我正在测试的数组:
阵 ( [psc_opt_1] => 1 [psc_opt_2] => 2 [psc_opt_3] => 3 [psc_opt_4] => 4 [psc_opt_5] => )
阵 ( [psc_opt_1] =>五 [psc_opt_2] => 2 [psc_opt_3] => 3 [psc_opt_4] => 4 [psc_opt_5] => )
阵 ( [psc_opt_1] => 7 [psc_opt_2] => 2 [psc_opt_3] => 3 [psc_opt_4] => 4 [psc_opt_5] => )
答案 0 :(得分:0)
这似乎是一个NULL与空问题。 NULL是非值,而''是带0个字符的空字符串。
编辑代码:
<?php
$data = array (
"psc_opt_1" => '1',
"psc_opt_2" => '2',
"psc_opt_3" => '3',
"psc_opt_4" => '4',
"psc_opt_5" => '',
);
foreach($data as $field => $value)
{
echo 'Now processing: '.$field.' | ';
if(!is_null($value) && !empty($value))
{
echo $field.' has value of: '.$value;
}
else
{
echo $field.' is empty of NULL';
}
echo '</br>';
}
答案 1 :(得分:0)
问题似乎是foreach不喜欢将null值传递给它,因此它保留了前一个循环的值。我发现如果我将ampersamp添加如下,它会传递空值:
foreach($data as $field => &$value)
{
}