PHP多维数组元素添加问题:array_push参数为null报错求助
问题分析与解决
首先,咱们来拆解你遇到的两个核心问题:
array_push()参数为null的警告:当$vessel_fcm_new和$vessel_fcm_old相等时,第一个if块不会执行,$data变量根本没被初始化,此时如果进入第二个if块调用array_push,自然会报错——因为$data是null,不是合法数组。- 输出里的
null值:那些既不满足第一个条件也不满足第二个条件的行,$data未被定义,直接执行$data_return[] = $data就会把null塞进结果数组里。
修复方案
核心思路是在每次循环开始时初始化$data为空数组,确保后续的数组操作都有合法的数组对象;另外可以选择跳过空数组的添加,避免结果里出现无用的空元素。
修改后的代码如下:
$insertquery->bind_result($tracking_type, $tracking_change_date, $vessel_fcm_new, $vessel_fcm_old, $vessel_hull_id_new, $vessel_hull_id_old, $vessel_name_new, $vessel_name_old, $vessel_length_new, $vessel_length_old, $vessel_manufacturer_new, $vessel_manufacturer_old, $vessel_manufacturer_id_new, $vessel_manufacturer_id_old, $vessel_year_new, $vessel_year_old, $vessel_value_new, $vessel_value_old, $owner_id_new, $owner_id_old, $loss_payee_id_new, $loss_payee_id_old, $policy_id_new, $policy_id_old, $policy_start_date_new, $policy_start_date_old, $policy_end_date_new, $policy_end_date_old, $vessel_fcm, $vessel_hull_id, $vessel_name, $vessel_manufacturer_id); while ($insertquery->fetch()) { // 每次循环初始化$data为空数组,从根源避免未定义的情况 $data = []; if ($vessel_fcm_new != $vessel_fcm_old) { // 直接追加元素,写法更直观 $data[] = $vessel_fcm_new; $data[] = $vessel_fcm_old; } if ($vessel_name_new != $vessel_name_old) { // 这里用array_push也完全没问题,两种写法效果一致 array_push($data, $vessel_name_new, $vessel_name_old); } // 可选:如果$data不为空,再加入结果数组,过滤无变更的行 if (!empty($data)) { $data_return[] = $data; } } echo json_encode($data_return);
关键改动说明
- 循环内开头初始化
$data = []:保证无论后续条件是否满足,$data都是一个合法的数组,彻底解决array_push的警告问题。 - 灵活选择元素添加方式:直接用
$data[]或者array_push都能安全操作数组,选你习惯的写法即可。 - 添加
!empty($data)判断:过滤掉没有任何变更的行,避免结果数组里出现空数组或者null,让输出完全符合你期望的[[element1], [element2], ...]格式。
内容的提问来源于stack exchange,提问作者dataviews
相关产品推荐
相关产品推荐

