当前位置: 首页 > news >正文

PHP:将关联数组转换为索引数组的完整示例

处理之前的数据

头和行在一起显示

// 执行SQL查询后的原始数据(假设查询返回3条记录)
$rawData = [
    [
        'wip_entity_name' => 'JOB001',
        'primary_item' => 'ITEM001',
        'primary_name' => '主产品1',
        'primary_desc' => '主产品描述1',
        'start_quantity' => 100,
        'quantity_completed' => 50,
        'segment1' => 'COMP001',
        'item_name' => '组件1',
        'item_desc' => '组件1描述',
        'operation_seq_num' => 10,
        'required_quantity' => 2
    ],
    [
        'wip_entity_name' => 'JOB001',
        'primary_item' => 'ITEM001',
        'primary_name' => '主产品1',
        'primary_desc' => '主产品描述1',
        'start_quantity' => 100,
        'quantity_completed' => 50,
        'segment1' => 'COMP002',
        'item_name' => '组件2',
        'item_desc' => '组件2描述',
        'operation_seq_num' => 20,
        'required_quantity' => 1
    ],
    [
        'wip_entity_name' => 'JOB002',
        'primary_item' => 'ITEM002',
        'primary_name' => '主产品2',
        'primary_desc' => '主产品描述2',
        'start_quantity' => 200,
        'quantity_completed' => 80,
        'segment1' => 'COMP003',
        'item_name' => '组件3',
        'item_desc' => '组件3描述',
        'operation_seq_num' => 30,
        'required_quantity' => 5
    ]
];

// 原始数据对应的JSON表示
/*
[
    {
        "wip_entity_name": "JOB001",
        "primary_item": "ITEM001",
        "primary_name": "主产品1",
        "primary_desc": "主产品描述1",
        "start_quantity": 100,
        "quantity_completed": 50,
        "segment1": "COMP001",
        "item_name": "组件1",
        "item_desc": "组件1描述",
        "operation_seq_num": 10,
        "required_quantity": 2
    },
    {
        "wip_entity_name": "JOB001",
        "primary_item": "ITEM001",
        "primary_name": "主产品1",
        "primary_desc": "主产品描述1",
        "start_quantity": 100,
        "quantity_completed": 50,
        "segment1": "COMP002",
        "item_name": "组件2",
        "item_desc": "组件2描述",
        "operation_seq_num": 20,
        "required_quantity": 1
    },
    {
        "wip_entity_name": "JOB002",
        "primary_item": "ITEM002",
        "primary_name": "主产品2",
        "primary_desc": "主产品描述2",
        "start_quantity": 200,
        "quantity_completed": 80,
        "segment1": "COMP003",
        "item_name": "组件3",
        "item_desc": "组件3描述",
        "operation_seq_num": 30,
        "required_quantity": 5
    }
]
*/

处理之后的数据

将同样的头规整到一起显示

{
    "status": "success",
    "message": "数据获取成功",
    "data": [
        {
            "wip_entity_name": "JOB001",
            "primary_item": "ITEM001",
            "primary_name": "主产品1",
            "primary_desc": "主产品描述1",
            "start_quantity": 100,
            "quantity_completed": 50,
            "lines": [
                {
                    "segment1": "COMP001",
                    "item_name": "组件1",
                    "item_desc": "组件1描述",
                    "operation_seq_num": 10,
                    "required_quantity": 2
                },
                {
                    "segment1": "COMP002",
                    "item_name": "组件2",
                    "item_desc": "组件2描述",
                    "operation_seq_num": 20,
                    "required_quantity": 1
                }
            ]
        },
        {
            "wip_entity_name": "JOB002",
            "primary_item": "ITEM002",
            "primary_name": "主产品2",
            "primary_desc": "主产品描述2",
            "start_quantity": 200,
            "quantity_completed": 80,
            "lines": [
                {
                    "segment1": "COMP003",
                    "item_name": "组件3",
                    "item_desc": "组件3描述",
                    "operation_seq_num": 30,
                    "required_quantity": 5
                }
            ]
        }
    ]
}

代码

<?php
// 这里只写数据库部分-查出全部的数据头和行数据
$sql = "SELECT 
            a.wip_entity_name,
            a.primary_item,
            c.item_name AS primary_name,
            c.item_desc AS primary_desc,
            a.start_quantity,
            a.quantity_completed,
            d.segment1,
            e.item_name,
            e.item_desc,
            d.operation_seq_num,
            d.required_quantity 
        FROM 
            wip_jobs_all a
            JOIN sf_item_no c ON a.primary_item = c.item_no
            JOIN wip_material_requierments d ON a.wip_entity_name = d.wip_entity_name
            JOIN sf_item_no e ON d.segment1 = e.item_no
        WHERE 1=1";
// 执行查询
$result = mysqli_query($conn, $sql);
//数据库查询错误提示
if (!$result) {
    // 查询失败处理
    $response = [
        'status' => 'error',
        'message' => '查询失败: ' . mysqli_error($conn),
        'data' => []
    ];
    echo json_encode($response);
    exit;
}
// 处理查询结果
//定义一个空数组
$groupedData = [];
while ($row = mysqli_fetch_assoc($result)) {
    //以wip_entity_name作为唯一的键名
    $wipEntity = $row['wip_entity_name'];
    // 如果该工单尚未初始化,创建头部信息
    if (!isset($groupedData[$wipEntity])) {
        $groupedData[$wipEntity] = [
            'wip_entity_name' => $row['wip_entity_name'],
            'primary_item' => $row['primary_item'],
            'primary_name' => $row['primary_name'],
            'primary_desc' => $row['primary_desc'],
            'start_quantity' => $row['start_quantity'],
            'quantity_completed' => $row['quantity_completed'],
            'lines' => []
        ];
    }
    // 添加行项目数据
    $groupedData[$wipEntity]['lines'][] = [
        'segment1' => $row['segment1'],
        'item_name' => $row['item_name'],
        'item_desc' => $row['item_desc'],
        'operation_seq_num' => $row['operation_seq_num'],
        'required_quantity' => $row['required_quantity']
    ];
}

// 释放结果集
mysqli_free_result($result);

// 将关联数组转换为索引数组(兼容所有PHP版本)
$finalData = array_values($groupedData);

// 构建响应
$response = [
    'status' => 'success',
    'message' => '数据获取成功',
    'data' => $finalData
];

// 设置JSON头并输出响应
header('Content-Type: application/json; charset=utf-8');
echo json_encode($response, JSON_UNESCAPED_UNICODE);

// 关闭数据库连接
mysqli_close($conn);
?>

相关文章:

  • 网站的英文版怎么做的上海十大营销策划公司排名
  • 制作网页小程序seo搜索推广费用多少
  • 南京直销网站开发吉林网站推广公司
  • 网站建设怎么开发客户爱站工具包的主要功能
  • 网站设置价格错误不愿意发货线上营销方式6种
  • 进qq空间上面没有网站上海搜索关键词排名
  • Linux环境基础开发工具使用
  • AI比人脑更强,因为被植入思维模型【50】邓克效应思维模型
  • 电源测试系统自动化转型:Chroma 8000 与 NSAT-8000 核心功能对比解析
  • 第一章:SQL 基础语法与数据查询
  • 海运货代系统哪家好?能解决了哪些常见管理难题?
  • Less的使用
  • ​​如何测试一个API接口?从原理到实践详解
  • 【Dubbo】分布式服务框架的卓越之选
  • MySQL报Lock wait timeout exceeded; try restarting transaction
  • stm32+esp8266+机智云手机app
  • 《深度解析LightGBM与MySQL数据集成:高效机器学习的新范式》
  • 【Java设计模式】第5章 工厂方法模式讲解
  • 通过Aop实现限制修改删除指定账号的数据
  • QML Loader:动态加载与控件创建
  • git命令
  • LLM面试题十
  • EmotiVoice 易魔声AI语音下载安装使用教程​(附安装包)
  • 移动端、PC端(Web) 和 桌面端(客户端应用)AI驱动测试实现方案
  • Spring-MVC
  • 从C语言到Go语言:新手快速入门指南