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

PHP处理CSGO API JSON数据:拆分物品名与价格并更新MySQL

正确处理CSGOFast价格API数据,实现MySQL的新增与更新

你之前踩的坑其实很典型——没搞清楚API返回的JSON结构!这个接口返回的是以物品名称为键、价格为值的对象,不是嵌套数组,所以用explode(':')或者转CSV完全是走偏了,直接遍历这个对象的键值对就搞定了。

最优解决方案:直接遍历键值对 + 用updateOrCreate实现新增/更新

Laravel的Eloquent提供了updateOrCreate方法,完美适配你“新增插入、已有更新”的需求。直接上可用代码:

// 先确保API_URL已正确定义,比如:
// define('API_URL', 'https://api.csgofast.com/price/all');

protected function populateItems() {
    // 把JSON转成关联数组(第二个参数传true),遍历起来更直观
    $items = json_decode(file_get_contents(API_URL), true);
    
    // 遍历每个物品的名称和对应价格
    foreach($items as $itemName => $price) {
        // updateOrCreate会自动判断:如果物品已存在就更新价格,不存在则新增记录
        Item::updateOrCreate(
            ['name' => $itemName], // 查询条件:根据物品名称匹配已有记录
            ['price' => $price]    // 要写入的字段(新增或更新)
        );
    }
    
    die('物品价格同步完成');
}

为什么你之前的方法失败了?

  • 最初代码的问题:你用json_decode得到的是stdClass对象,foreach($items as $item)里的$item其实只是价格值,不是包含名称和价格的数组,所以$i[0]和$i[1]根本不存在,自然取不到数据。
  • 转CSV的问题:完全没必要这么做!物品名称里可能包含逗号、引号等特殊字符,转CSV会直接破坏原有结构,导致拆分出来的内容完全错误,反而把简单问题复杂化了。

额外优化:加上异常处理(避免脚本崩溃)

如果API请求失败或者JSON解析出错,脚本直接挂掉很不友好,加个异常捕获会更稳健:

protected function populateItems() {
    try {
        $response = file_get_contents(API_URL);
        if ($response === false) {
            throw new Exception('无法连接到CSGOFast价格API');
        }
        
        $items = json_decode($response, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            throw new Exception('JSON解析失败:' . json_last_error_msg());
        }
        
        foreach($items as $itemName => $price) {
            Item::updateOrCreate(
                ['name' => $itemName],
                ['price' => $price]
            );
        }
        
        die('物品价格同步完成');
    } catch (Exception $e) {
        die('同步失败:' . $e->getMessage());
    }
}

大数据量优化(可选)

如果接口返回的物品数量特别多(比如你提到的15k+),可以考虑批量处理减少数据库查询次数,比如用chunk或者批量插入更新,但对于大多数场景来说,上面的代码已经足够高效了。

内容的提问来源于stack exchange,提问作者Matheus Sartori

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:09:04