
本文旨在指导开发者如何在codeigniter框架中,将从数据库获取的关联数组数据,转换并重构为前端或api所需的特定嵌套json数组格式。通过详细的代码示例,演示如何处理日期字符串到unix时间戳的转换,以及数字字符串到浮点数的转换,最终生成符合要求的json输出,以满足复杂的数据结构需求。
在Web应用开发中,尤其是在构建API接口时,我们经常需要将后端数据以特定的JSON格式返回给前端。CodeIgniter框架通常通过模型从数据库获取数据,这些数据默认以关联数组或对象数组的形式存在。然而,前端或某些图表库可能需要更紧凑或特定结构的JSON数据,例如一个包含时间戳和数值的二维数组。
假设我们从模型中获取了一组发票数据,其结构可能如下所示,其中包含 date_issued(日期字符串)和 grand_total(总金额字符串):
// 假设 $invoices 是从模型获取的数据
$invoices = [
    ['date_issued' => '2021-03-01', 'grand_total' => '972.948'],
    ['date_issued' => '2021-03-12', 'grand_total' => '1025.88']
];
// 直接使用 json_encode 进行编码
$response['price'] = $invoices;
echo json_encode($response, TRUE);这段代码会生成以下JSON输出:
{"price":[{"date_issued":"2021-03-01","grand_total":"972.948"},{"date_issued":"2021-03-12","grand_total":"1025.88"}]}然而,如果前端期望的格式是这样的:
{
  "price": [
    [
      1483275269000, // Unix时间戳 (毫秒)
      972.948
    ],
    [
      1483361668000,
      1025.88
    ]
  ]
}我们可以看到,默认的JSON编码并没有满足以下两点要求:
                        
                        Easily find JSON paths within JSON objects using our intuitive Json Path Finder
                                30
                            
                        
                    为了达到期望的JSON格式,我们需要在json_encode之前对数据进行手动处理。核心思想是遍历原始数据,针对每个字段进行必要的类型转换,并构建一个新的嵌套数组结构。
以下是实现这一转换的PHP代码:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Invoice extends CI_Controller {
    public function __construct() {
        parent::__construct();
        $this->load->model('invoice_model'); // 假设已加载模型
    }
    public function get_price_data() {
        // 假设 logged('company_id') 获取当前公司ID
        $company_id = logged('company_id'); 
        $invoices = $this->invoice_model->getAllData2($company_id);
        $temp = []; // 用于存储转换后的数据
        foreach ($invoices as $key1 => $value1) {
            $row_data = []; // 存储当前记录的转换结果
            foreach ($value1 as $key2 => $value2) {
                switch ($key2) {
                    case 'date_issued':
                        // 将日期字符串转换为Unix时间戳(秒),然后乘以1000得到毫秒
                        // 注意:strtotime 返回的是秒级时间戳
                        $row_data[] = strtotime($value2) * 1000; 
                        break;
                    case 'grand_total':
                        // 将字符串转换为浮点数
                        $row_data[] = floatval($value2);
                        break;
                    default:
                        // 忽略其他不需要的字段,或者根据需要处理
                        break;
                }
            }
            // 将处理后的行数据添加到 $temp 数组中
            $temp[] = $row_data;
        }
        $response['price'] = $temp;
        // 使用 json_encode 编码最终结果,第二个参数 TRUE 用于美化输出(PHP 5.4+)
        // 如果不需要美化,可以省略 TRUE 或使用 JSON_PRETTY_PRINT 选项
        header('Content-Type: application/json'); // 设置响应头为JSON
        echo json_encode($response, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);
    }
}代码解析:
通过上述方法,我们成功地将CodeIgniter从数据库获取的关联数组数据,转换并重构为符合特定前端需求的嵌套JSON数组格式。这强调了在API开发中,对数据进行预处理和类型转换的重要性,以确保后端输出与前端消费接口之间的数据契合度。理解并掌握这种数据转换技巧,能让开发者在构建灵活且健壮的Web服务时更加得心应手。
以上就是CodeIgniter中定制化JSON数组输出格式的实现的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号