CodeIgniter数据重塑:将数据库结果转换为前端友好的JSON数组

CodeIgniter数据重塑:将数据库结果转换为前端友好的JSON数组

本教程详细指导如何在codeigniter框架中,将从数据库获取的原始数据(如包含日期和总额的对象数组)转换为特定的嵌套json数组格式。通过数据预处理,包括日期到unix时间戳(毫秒)的转换和字符串到浮点数的转换,确保api输出符合前端(如图表库)的严格要求,从而实现灵活且精确的数据呈现。

在构建Web应用程序的API接口时,我们经常需要将从数据库中查询到的数据以特定的JSON格式返回给前端。虽然CodeIgniter的查询构建器和json_encode函数能够方便地将数据库结果转换为JSON,但有时前端(例如图表库)需要一种更为精确或嵌套的数组结构,而非简单的值对对象数组。本教程将深入探讨如何将典型的数据库查询结果,如包含日期字符串和总金额字符串的对象数组,重塑为前端期望的 [[时间戳, 数值], [时间戳, 数值]] 这种嵌套数组格式。

初始数据与目标格式

假设我们从数据库中获取了一系列发票数据,其中包含date_issued(日期字符串)和grand_total(总金额字符串)字段。通过模型方法获取数据后,通常会得到一个对象数组(或关联数组数组),例如:

// 假设 $this->invoice_model->getAllData2() 返回以下结构$invoices = [    (object)['date_issued' => '2021-03-01', 'grand_total' => '972.948'],    (object)['date_issued' => '2021-03-12', 'grand_total' => '1025.88']];

如果直接使用json_encode将其包裹在一个响应对象中,我们会得到如下JSON:

{  "price": [    {"date_issued":"2021-03-01","grand_total":"972.948"},    {"date_issued":"2021-03-12","grand_total":"1025.88"}  ]}

然而,前端可能期望的格式是:

立即学习“前端免费学习笔记(深入)”;

{  "price": [    [1483275269000, 972.948],    [1483361668000, 1025.88]  ]}

这种格式要求日期被转换为Unix时间戳(通常是毫秒级),并且总金额被转换为浮点数,然后两者组成一个内部数组,再由这些内部数组构成一个外部数组。

数据重塑实现

为了达到目标格式,我们需要在将数据传递给json_encode之前进行一次数据转换。这涉及到遍历原始数据,对每个记录的特定字段进行类型转换和结构重组。

以下是在CodeIgniter控制器中实现这一转换的示例代码:

load->model('invoice_model'); // 确保加载了你的模型        $this->output->set_content_type('application/json'); // 设置响应头为JSON    }    public function getInvoicePrices() {        // 1. 从模型获取原始数据        // 假设 logged('company_id') 获取当前用户的公司ID        $invoices = $this->invoice_model->getAllData2(logged('company_id'));        // 2. 初始化一个空数组,用于存储处理后的价格数据        $processedPrices = [];        // 3. 遍历原始发票数据并进行转换        foreach ($invoices as $invoice) {            // 确保 $invoice 是一个对象或关联数组。            // 如果是对象,使用 $invoice->property_name            // 如果是关联数组,使用 $invoice['property_name']            // 假设这里返回的是对象            // 将日期字符串转换为Unix时间戳(秒),然后乘以1000转换为毫秒            $timestamp = strtotime($invoice->date_issued) * 1000;            // 将总金额字符串转换为浮点数            $grandTotal = floatval($invoice->grand_total);            // 将转换后的时间戳和金额组成一个新数组,并添加到 processedPrices 中            $processedPrices[] = [$timestamp, $grandTotal];        }        // 4. 构建最终的响应结构        $response['price'] = $processedPrices;        // 5. 将响应数组编码为JSON并输出        echo json_encode($response);    }}

代码解析与注意事项

数据获取: $invoices = $this->invoice_model->getAllData2(logged(‘company_id’)); 这一行从模型中获取原始数据。确保你的invoice_model中的getAllData2方法返回的是一个包含date_issued和grand_total字段的对象数组(或关联数组数组)。初始化目标数组: $processedPrices = []; 创建一个空数组,用于存放转换后的数据。数据遍历与转换:foreach ($invoices as $invoice): 循环遍历从数据库获取的每一条发票记录。strtotime($invoice->date_issued): 这是PHP内置函数,用于将日期/时间字符串解析为Unix时间戳(自1970年1月1日00:00:00 UTC以来的秒数)。* 1000: 大多数前端图表库(如Highcharts, Chart.js等)期望的时间戳是毫秒级的。strtotime返回的是秒,所以需要乘以1000。floatval($invoice->grand_total): 这是PHP内置函数,用于将变量转换为浮点数。由于数据库中数值字段可能以字符串形式返回,显式转换为浮点数可以确保数值的精确性。$processedPrices[] = [$timestamp, $grandTotal];: 将转换后的时间戳和浮点数作为一个新的子数组添加到$processedPrices数组中。这种简洁的语法直接创建了 [value1, value2] 形式的数组。构建最终响应: $response[‘price’] = $processedPrices; 将处理后的数据赋值给$response数组的price键,以匹配期望的JSON结构。JSON输出: echo json_encode($response); 将PHP数组 $response 编码为JSON字符串并输出。这里移除了原始问题中json_encode的第二个参数TRUE,因为TRUE在json_encode的options参数中通常不代表任何有意义的选项,且可能导致意外行为。如果需要美化输出,应使用 JSON_PRETTY_PRINT 常量,如 echo json_encode($response, JSON_PRETTY_PRINT);。内容类型: 在控制器构造函数中添加 $this->output->set_content_type(‘application/json’); 是一个良好的实践,它明确告诉客户端响应的内容类型是JSON。

总结

通过在json_encode之前对数据进行精细的预处理,我们可以将数据库查询的原始结果重塑为任何前端所需的复杂JSON结构。这种方法提供了极大的灵活性,特别是在处理日期、数值类型转换以及生成嵌套数组以满足特定API或UI组件要求时显得尤为重要。理解并掌握这种数据转换技术,是构建健壮且适应性强的API接口的关键一步。

以上就是CodeIgniter数据重塑:将数据库结果转换为前端友好的JSON数组的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1323810.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何优雅地在网页上展示从MySQL数据库获取的数据
上一篇 2025年12月12日 10:32:59
基于模态框点击展示不同数据的教程
下一篇 2025年12月12日 10:33:06

相关推荐

  • 使用php连接mssql实现日志记录_通过php连接mssql完成日志管理

    使用PHP连接MSSQL可实现高效日志管理,首先需安装sqlsrv扩展并配置php.ini;接着通过sqlsrv_connect建立数据库连接,确保SQL Server启用TCP/IP协议;然后创建包含LogLevel、Message、Source等字段的AppLogs表;封装writeLog函数插…

    2026年9月22日
    000
  • laravel如何使用Pipeline模式处理复杂逻辑_Laravel Pipeline模式处理复杂逻辑方法

    Laravel Pipeline通过将复杂流程拆分为多个独立处理步骤,实现代码解耦与职责分离。以用户注册为例,可依次执行发送欢迎邮件、分配角色、记录日志等操作,每个步骤由单独类实现__invoke方法,通过Pipeline::send($user)->through([…])-&g…

    2026年9月22日
    200
  • 消逝的光芒困兽火球术获取与无限使用教程 火球术怎么获取

    在《消逝的光芒:困兽》中,如下图所示位置的桥走到尽头会发现一堵看似无法通过的砖墙,但实际上可以穿过去。穿过之后就能看到一个隐藏区域,里面有一个经典的麦块彩蛋。将显示“Minecraft”字样的方块用武器击碎,随后沿着路径一直前进,最终即可获得制作火球术的配方。 关于火球术的无限使用技巧:释放技能时会…

    2026年9月22日
    100
  • php-gd怎么制作缩略图_php-gd生成高质量缩略图

    使用PHP-GD生成高质量缩略图需保持宽高比、选用imagecopyresampled进行重采样,并合理设置JPEG质量(80-95),同时处理PNG透明通道,避免图像失真或背景变黑。 使用 PHP-GD 制作高质量缩略图,核心在于正确处理图像缩放、保持宽高比、避免失真,并选择合适的图像质量参数。下…

    2026年9月22日
    000
  • PHP日志记录怎么做_PHP中Monolog库实现灵活强大的日志系统

    Monolog是PHP中基于PSR-3标准的主流日志库,通过Composer安装后可轻松实现日志记录。使用Logger类创建实例并添加Handler(如StreamHandler写入文件、NativeMailerHandler邮件报警)来管理不同级别(debug、info、error等)日志输出,支…

    2026年9月22日
    200
  • PHP数组如何定义和使用_PHP数组定义与使用详细教程

    PHP数组是存储和管理多个值的核心工具,支持索引、关联、混合及多维结构;通过方括号定义,可灵活访问、修改、添加或删除元素,并利用foreach高效遍历。 PHP数组是存储一系列值的强大工具,无论这些值是简单的数据项,还是更复杂的结构。它的核心思想就是把一堆相关的数据“打包”在一起,通过一个统一的名字…

    2026年9月22日
    000
  • PHPJSON数据怎么解析_PHP处理JSON数据格式

    PHP使用json_decode()解析JSON数据,传入字符串和true参数可转为数组,适用于API响应、文件读取等场景,需配合json_last_error()检查解析是否成功。 PHP解析JSON数据非常简单,主要依靠内置的两个函数:json_decode() 和 json_encode()。…

    2026年9月22日
    100
  • Flyway多数据库与CI/CD测试集成策略

    本文深入探讨了在CI/CD流程中,如何高效地配置Flyway以管理多数据库环境下的迁移,尤其关注集成测试场景。我们将比较使用真实数据库服务、Testcontainers以及Flyway自身多数据库配置的优劣,并提供关于分离生产与测试环境迁移脚本的实用策略,旨在确保开发、测试与生产环境的数据一致性与流…

    2026年9月22日
    100
  • PHP框架日志系统怎么记录错误_PHP框架日志系统配置指南

    PHP框架通过配置日志级别、通道和处理器,结合Monolog库实现错误记录。以Laravel和Symfony为例,可在配置文件中定义多通道(如文件、Slack)、设置不同级别(ERROR、CRITICAL),并通过门面或服务在代码中捕获异常并写入上下文信息。 PHP框架的日志系统记录错误,核心在于通…

    2026年9月22日
    000
  • 美团外卖如何使用支付宝支付

    想要在美团外卖中使用支付宝完成支付,享受更灵活便捷的点餐体验?只需几个简单步骤即可轻松实现。 首先,请确认你的手机已安装最新版本的美团外卖和支付宝应用程序。打开美团外卖App,浏览并选择你喜欢的美食,加入购物车后,点击“去结算”进入订单确认页面。 进入支付界面后,系统通常默认选择“美团支付”。此时,…

    2026年9月22日
    200
  • Spring Boot自定义Kafka配置与动态Bean注册最佳实践

    本文探讨了在Spring Boot应用中通过自定义注解简化Kafka配置的挑战与解决方案。重点介绍了如何利用META-INF/spring.factories实现早期自动配置,并详细阐述了使用ImportBeanDefinitionRegistrar在应用上下文初始化早期动态注册Kafka生产者工厂…

    2026年9月22日
    100
  • VSCode配合Vivado进行FPGA图像处理(算法加速与优化)

    答案:VSCode与Vivado结合可提升FPGA图像处理开发效率,前者用于代码编辑、版本控制和远程开发,后者负责综合、实现与调试,二者协同实现高效算法优化。 将VSCode与Vivado结合用于FPGA图像处理,本质上是利用VSCode作为高效的代码编辑、版本控制和辅助开发环境,来弥补Vivado…

    2026年9月22日
    200
  • 构建VSCode多媒体编程界面与实时音视频处理

    答案:VSCode通过配置Node.js、Python扩展及FFmpeg等工具,结合OpenCV、PyAudio等框架,可构建高效音视频处理环境。1. 安装Python和Node.js支持,启用Pylance、Jupyter插件提升数据处理体验;2. 配置终端与Code Runner实现脚本一键执行…

    2026年9月22日
    100
  • 在Java中如何开发简易问答社区

    答案是Java结合Spring Boot可快速构建问答社区,通过设计questions、answers、users三张表实现数据存储,使用JPA进行持久化,前端用HTML+JS调用后端API完成用户提问、回答、查看与互动功能。 开发一个简易问答社区,核心是实现用户提问、回答、查看问题和互动功能。Ja…

    2026年9月22日
    100
  • PHP 数组元素按日期条件过滤与删除:避免常见陷阱

    本教程详细介绍了如何在 PHP 中根据日期条件动态删除数组(或对象数组)中的元素。文章将重点讲解如何正确进行日期比较,特别是当数据源为 JSON 格式时,以及 unset 函数在遍历过程中移除元素时的正确用法,帮助开发者避免常见的字符串日期比较和对象属性访问错误。 简介 在数据处理中,根据特定条件过…

    2026年9月22日
    100
  • 解决Android设备管理移除时的SecurityException

    本文将详细介绍如何解决在尝试从Android设备移除设备管理员时遇到的java.lang.SecurityException异常。该异常通常发生在尝试移除一个非测试用途的设备管理员应用时。通过修改应用的配置,将其临时标记为测试应用,可以绕过此安全限制,从而成功移除设备管理员。请务必注意,这种方法仅适…

    2026年9月22日
    100
  • 百度地图导航语音无法关闭怎么办 百度地图语音设置调整技巧

    首先要分清关闭的是导航语音播报还是语音唤醒功能。①关闭导航语音:打开百度地图→【我的】→【设置】→【导航设置】→【导航中语音】→选择【静音】。②关闭语音唤醒:进入【我的】→【设置】→【语音设置】→【智能语音】→关闭【说“小度小度”唤醒】开关。操作后仍无效可尝试更新App或重新登录账号。 百度地图导航…

    2026年9月22日
    000
  • 悟空浏览器看小说章节错乱怎么办_悟空浏览器小说章节错乱解决方法

    1、清除悟空浏览器缓存:进入手机设置→悟空浏览器→存储→清除缓存,重启应用查看是否恢复。2、切换网络环境:断开当前Wi-Fi改用移动数据或更换其他Wi-Fi,关闭并重开浏览器,下拉刷新章节页面。3、更新或重装应用:前往应用商店更新悟空浏览器至最新版本;若无效则卸载后重新下载安装,登录账号后再次阅读,…

    2026年9月22日
    000
  • 抖音号如何升级成企业号?升级成企业号需要多久?

    随着短视频平台的迅猛发展,抖音已成为企业进行品牌宣传与用户运营的核心渠道。将普通个人账号升级为企业号,不仅能够解锁更多营销工具,还能增强品牌的权威性与可信度。 一、抖音个人号怎样升级为企业号? 确认基本条件 在申请前,需确保账号已完成实名认证,且未有违反社区规范的行为。个人账号必须绑定手机号,并完善…

    2026年9月22日
    600
  • MySQL SHOW 语句与预处理参数绑定:深入解析与解决方案

    本文深入探讨了在PHP PDO中尝试使用参数绑定执行SHOW VARIABLES LIKE :var查询时遇到的常见问题。核心原因是MySQL对SHOW类语句的预处理存在限制,导致无法直接绑定参数。文章提供了多种有效的替代方案,包括字符串拼接(需注意安全)以及更推荐的通过WHERE variable…

    2026年9月22日
    600

发表回复

登录后才能评论
关注微信