You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中array_push()向数组推入数据未生效的问题及解决

问题分析与解决方法

可能的原因及对应解决思路

1. JSON解析未正确转为关联数组或解析失败

  • 问题点:json_decode()默认返回对象,要是你用数组方式访问$item['jenis_cairan_masuk']['value']会直接报错,后续分类逻辑根本跑不起来;另外如果原始JSON格式不合法,json_decode()会返回null,遍历空数据自然不会有内容。
  • 解决:
    • 调用json_decode()时加第二个参数true,强制转成关联数组:$cairanData = json_decode($data['tabel_cairan_masuk'], true);
    • 先做解析错误检查,快速定位问题:
      $cairanData = json_decode($data['tabel_cairan_masuk'], true);
      if (json_last_error() !== JSON_ERROR_NONE) {
          die('JSON解析错误: ' . json_last_error_msg());
      }
      

2. 目标数组初始化错误或键名不匹配

  • 问题点:如果$jenis_cairan_masuk_master的键名和jenis_cairan_masuk的value值对不上,或者没预先给对应键初始化空数组,array_push()找不到目标位置,甚至直接报错。
  • 解决:
    • 提前把目标数组的键设置成所有需要分类的jenis_cairan_masuk的value值,每个键对应空数组:
      // 示例初始化,根据实际业务调整键名
      $jenis_cairan_masuk_master = [
          'air_minum' => [],
          'susu' => [],
          'jus' => []
      ];
      
    • 遍历前先校验当前数据的value是否在目标数组的键里,避免无效操作:
      $currentType = $item['jenis_cairan_masuk']['value'];
      if (isset($jenis_cairan_masuk_master[$currentType])) {
          array_push($jenis_cairan_masuk_master[$currentType], $item);
      }
      

3. 遍历的数据源为空

  • 问题点:$data['tabel_cairan_masuk']本身是空字符串,或者解析后得到的$cairanData是空数组,遍历自然不会产生任何数据。
  • 解决:
    • 先打印原始JSON字符串确认内容:var_dump($data['tabel_cairan_masuk']);
    • 确认解析后的数组非空再执行遍历:
      if (!empty($cairanData)) {
          foreach ($cairanData as $item) {
              // 分类逻辑
          }
      }
      

4. 变量作用域问题(如果在函数中操作)

  • 问题点:如果是在自定义函数里处理分类,$jenis_cairan_masuk_master作为外部变量,没通过global声明或引用传递的话,函数内的修改不会影响外部数组。
  • 解决:
    • 方法一:用global声明变量:
      function classifyCairan($data) {
          global $jenis_cairan_masuk_master;
          $cairanData = json_decode($data['tabel_cairan_masuk'], true);
          // 遍历分类逻辑
      }
      
    • 方法二:通过引用传递目标数组:
      function classifyCairan($data, &$targetArray) {
          $cairanData = json_decode($data['tabel_cairan_masuk'], true);
          foreach ($cairanData as $item) {
              $currentType = $item['jenis_cairan_masuk']['value'];
              if (isset($targetArray[$currentType])) {
                  array_push($targetArray[$currentType], $item);
              }
          }
      }
      // 调用时
      classifyCairan($data, $jenis_cairan_masuk_master);
      

完整可运行示例代码

// 初始化目标分类数组
$jenis_cairan_masuk_master = [
    'air_minum' => [],
    'susu' => [],
    'jus' => []
];

// 模拟原始JSON数据
$data['tabel_cairan_masuk'] = '[
    {"id":1,"jenis_cairan_masuk":{"value":"air_minum","label":"Air Minum"},"volume":500},
    {"id":2,"jenis_cairan_masuk":{"value":"susu","label":"Susu"},"volume":200},
    {"id":3,"jenis_cairan_masuk":{"value":"air_minum","label":"Air Minum"},"volume":300}
]';

// 解析JSON并检查错误
$cairanData = json_decode($data['tabel_cairan_masuk'], true);
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解析错误: ' . json_last_error_msg());
}

// 遍历分类数据
if (!empty($cairanData)) {
    foreach ($cairanData as $item) {
        // 加?? ''避免不存在value时报错
        $currentType = $item['jenis_cairan_masuk']['value'] ?? '';
        if (isset($jenis_cairan_masuk_master[$currentType])) {
            array_push($jenis_cairan_masuk_master[$currentType], $item);
        }
    }
}

// 输出结果
var_dump($jenis_cairan_masuk_master);

内容的提问来源于stack exchange,提问作者Bonifacius Sarumpaet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:33:34