NULL为0-PHP数组

NULL为0-PHP数组,php,arrays,Php,Arrays,我有一个数组,其中包含一些条目。一些是字符串,另一些是int。这些是在MySQL中定义的类型(int,varchar)。我创建的数组如下所示:(缩小了数组,因为太长) 正如您可以看到的,“month\u spend”和/或“month\u adops”中的一些字段为空,问题是在PHP中,当数据库中的字段为整数时,该值被转换为“NULL”,因此结果给出: Incorrect integer value: '' for column 'month_spend' at row 2" 所以我试着在fo

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

正如您可以看到的,
“month\u spend”
和/或
“month\u adops”
中的一些字段为空,问题是在PHP中,当数据库中的字段为整数时,该值被转换为“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循环没有编辑数据?

如果需要,请使用以下命令检查这两个数据,而不是使用else

$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;
}
试着替换

empty()


假设您的数组名为$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
  }
}
变量转储($myArray)

在您的例子中,您只是将一个空数组赋值给$result\u,而不替换任何其他内容

  • 0
    中的
    empty
    将返回false。因此,您的代码将与此函数冗余。尝试使用is_整数。如果不是整数,则指定零。糟糕的是,您无法使用
    foreach
    避免循环

  • 是否可以通过使用更具体的mysql查询来避免来自
    php的
    foreach
    ,例如
    IF(ISNULL(your_列),0,your_列)


  • 因此,在多个元素的数组中,可以有空的“month_budget”或“month_Expense”或“month_adops_forecast”和“month_adops”,但我不能使用,或者因为某些对象在两个变量和其他三个变量中都有值。如果这些字段为空,插入0的最佳方法是什么。也许我应该重写我的问题,不确定这是否有帮助,但您可以通过在
    $key=>&$result
    中添加
    &
    来更新数据。这将更改原始数组,而不必创建替换数组。请显示SQL查询PHP为什么应将来自数据库的
    0
    强制转换为
    NULL
    ?以前从没见过。此外,请编辑您的问题以添加更多详细信息,不要在SQL中使用注释部分,您可以使用
    IFNULL(month\u budget,0)
    ,如果您还想修改问题中提到的
    month\u adops
    ,只需添加一个额外的if:)即可!我添加了更多字段,这是一种好的做法吗?是的,如果数据不一致,可以使用。在使用
    &$result
    时,是否确实需要
    $result\u replace
    数组?这可能会将空字符串值(即月注释)设置为0。
    is_null()
    
        array_walk_recursive($array, function (&$value, $key){
            if(!isset($value) && ('month_spend' === $key || 'month_adops' === $key)) {
                $value = 0;
            }
        });
    
    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
      }
    }