NULL到0-PHP数组

时间:2018-08-23 11:25:29

标签: php arrays

我有一个包含一些条目的数组。一些是字符串,其他是int。那些是在MySQL中定义的(int,varchar)类型。我创建的数组如下所示:(缩小了数组,因为太长了)

[3] => Array
    (
        [account_id] => *******
        [month_id] => 201903
        [month_comment] => 4,5% spend flat
        [month_spend] => 23000
        [month_budget] => 0
        [month_adops] => 1035
        [month_adops_forecast] => 1035
    )

[4] => Array
    (
        [account_id] => ******
        [month_id] => 201905
        [month_comment] => 
        [month_spend] => 
        [month_budget] => 0
        [month_adops] => 
        [month_adops_forecast] => 45
    )

[5] => Array
    (
        [account_id] => *******
        [month_id] => 201906
        [month_comment] => 
        [month_spend] => 
        [month_budget] => 0
        [month_adops] => 
        [month_adops_forecast] => 92
    )

您可以看到"month_spend"和/或"month_adops"中的一些为空,问题是在PHP中,当数据库中的字段为Integer时,该值转换为“ NULL”,因此结果为我:

Incorrect integer value: '' for column 'month_spend' at row 2"

所以我试图在这样的foreach循环中更改它:

$result_replace = array();
foreach ($data_replace as $key => $result) {
    $result['month_id'] = substr_replace($result['month_id'], '2019', 0, 4);
    if(empty($result['month_budget'])) {
        $result['month_budget'] = 0;
        $result_replace[] = $result;
    }
    else if(empty($result['month_spend'])) {
        $result['month_spend'] = 0;
        $result_replace[] = $result;
    }
}

但是看起来foreach循环不会编辑数据?

5 个答案:

答案 0 :(得分:2)

使用以下命令检查两者,而不是其他情况

$result_replace = array();
foreach ($data_replace as $key => &$result) {
    $result['month_id'] = substr_replace($result['month_id'], '2019', 0, 4);
    if(empty($result['month_budget'])) {
        $result['month_budget'] = 0;
    }
    if(empty($result['month_spend'])) {
        $result['month_spend'] = 0;
    }
    $result_replace[] = $result;
}

答案 1 :(得分:0)

尝试更换

empty()

通过

is_null()

答案 2 :(得分:0)

    array_walk_recursive($array, function (&$value, $key){
        if(!isset($value) && ('month_spend' === $key || 'month_adops' === $key)) {
            $value = 0;
        }
    });

答案 3 :(得分:0)

假设您的数组名为$ myArray

foreach ($myArray as $key => $result) {
  if(empty($result['month_budget'])) {
       $myArray[$key]['month_budget'] = 0
  }
  if(empty($result['month_spend'])) {
         $myArray[$key]['month_spend'] = 0
  }
}

var_dump($ myArray)

在您的情况下,您只是为$ result_replace分配了一个空数组

答案 4 :(得分:0)

    empty中的
  1. 0将返回false。因此,此功能将使您的代码变得多余。尝试使用is_integer。如果不是整数,则分配零。糟糕的是,您无法避免使用foreach进行循环。

  2. 可以通过使用更具体的mysql查询(例如)来避免foreach中的phpIF(ISNULL(your_column), 0, your_column)