0

配列の値をcodeigniterwhere関数に追加するためのforeachループがあります。コンテンツを含む値をこのループに渡しても、変更されません。ただし、null値が入ると、配列内でその前の項目の値とともに出力されます。

コードは次のとおりです。

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がnullであることを証明します。これは、私がテストしている配列です。

アレイ([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] =>)

4

2 に答える 2

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

}
于 2012-07-17T11:46:08.777 に答える
0

問題は、foreachがnull値が渡されることを好まないため、前のサイクルの値を保持していることです。以下のようにアンペアサンプルを追加すると、null値が次のように渡されることがわかりました。

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



}
于 2012-07-17T12:07:44.670 に答える