NULL为0-PHP数组
我有一个数组,其中包含一些条目。一些是字符串,另一些是int。这些是在MySQL中定义的类型(int,varchar)。我创建的数组如下所示:(缩小了数组,因为太长) 正如您可以看到的,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
“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
避免循环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
}
}