2012-07-17 65 views
0

我有一個foreach循環來將數組中的值添加到codeigniter的where函數中。當我將一個帶有內容的值傳遞給這個循環時,它不會改變。但是,當一個空值進入時,它會在數組之前出現它的值。空值問題

下面是代碼:

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] => 5 [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

這個問題似乎是在foreach不喜歡空值傳遞到它,因此它保留了上一次的值。我發現如果我添加ampersamp如下所示,它將通過空值:

foreach($data as $field => &$value) 
{ 



} 
+0

看看我編輯的代碼,比較你的數組和我的結果。 – Robert 2012-07-17 13:07:50

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>'; 

} 
+0

不幸的是,這並不影響它,爲什麼它可以拉動以前的值?順便說一句,我有一個if語句在foreach循環上面設置值爲null,但我認爲這與第一個相關,如果在進入循環之前證明該值爲null – 2012-07-17 11:51:30

+0

您能向我們展示數組嗎? – Robert 2012-07-17 11:53:03