使用PHP在JSON条目之间插入记录

时间:2016-04-27 14:22:31

标签: php mysql json

我有一个非常简单的PHP,它从我的数据库中获取数据View并生成一个JSON文件,然后将其写入我的服务器。

这是来自5家不同公司的员工名单。

我希望能够做到的是,每个返回的公司的第一位员工都要插入代表公司的项目(包括徽标)。

所以,它看起来像这样......

公司1 雇员 雇员 雇员 公司2 雇员 公司3 雇员 EMPLOYEE

目前我只是让所有员工。

这是我生成JSON的PHP

<?php    
$db=new PDO('mysql:dbname=DB;host=localhost;','username','pass');    
$row=$db->prepare('select * from Employee_JSON');  

$row->execute();//execute the query  
$json_data=array();//create the array  
foreach($row as $rec)//foreach loop  
{  
$json_array['employee_id']=$rec['employee_id'];  
    $json_array['employee_firstname']=$rec['employee_firstname'];  
    $json_array['employee_surname']=$rec['employee_surname'];  
    $json_array['employee_image']=$rec['employee_image'];
    $json_array['employee_status']=$rec['employee_status'];
    $json_array['company_id']=$rec['company_id']; 
    $json_array['company_name']=$rec['company_name']; 
    $json_array['company_hex']=$rec['company_hex'];  
//here pushing the values in to an array  
    array_push($json_data,$json_array);  

}  

//built in PHP function to encode the data in to JSON format  
echo json_encode($json_data);  

//write to json file
$fp = fopen('data/employees.json', 'w');
fwrite($fp, json_encode($json_data));
fclose($fp);


?> 

这是我的JSON示例返回。

[{
    "employee_id": "9",
    "employee_firstname": "Test",
    "employee_surname": "Name",
    "employee_image": "9.jpg",
    "employee_status": "1",
    "company_id": "1",
    "company_name": "CDE",
    "company_hex": "99C440"
}, {
    "employee_id": "49",
    "employee_firstname": "Testy",
    "employee_surname": "Test",
    "employee_image": "ce_holding.png",
    "employee_status": "1",
    "company_id": "1",
    "company_name": "CDE",
    "company_hex": "99C440"
}, {
    "employee_id": "8",
    "employee_firstname": "Tester",
    "employee_surname": "McTest",
    "employee_image": "8.jpg",
    "employee_status": "1",
    "company_id": "1",
    "company_name": "CDE",
    "company_hex": "99C440"
}]

我在数据库中有两个表,一个包含我想要的图像的URL的Company表和一个包含所有员工数据的Employee表。

这是公司表结构

enter image description here

这是Employee表结构

enter image description here

然后我在那些上创建一个内部联接来创建我在PHP样本中调用的数据库View。

CREATE VIEW `Employee_JSON`
AS SELECT
   `Employee`.`employee_id` AS `employee_id`,
   `Employee`.`employee_firstname` AS `employee_firstname`,
   `Employee`.`employee_surname` AS `employee_surname`,
   `Employee`.`employee_image` AS `employee_image`,
   `Employee`.`employee_status` AS `employee_status`,
   `Company`.`company_id` AS `company_id`,
   `Company`.`company_name` AS `company_name`,
   `Company`.`company_hex` AS `company_hex`
FROM (`Employee` join `Company` on((`Employee`.`employee_company_id` = `Company`.`company_id`))) where (`Employee`.`employee_active` = 1) order by `Company`.`company_name`,`Employee`.`employee_surname`,`Employee`.`employee_firstname`;

所以我的预期输出看起来像这样,在那里添加&#34; is_company&#34;:&#34; 1&#34;进入JSON可以帮助我的应用程序检测是否显示公司形象或员工形象。

[{
        "employee_id": "0",
        "employee_firstname": "Company",
        "employee_surname": "Name",
        "employee_image": "companyimage.jpg",
        "employee_status": "1",
        "company_id": "1",
        "company_name": "CDE",
        "is_company": "1",
        "company_hex": "99C440",

    }, {
        "employee_id": "9",
        "employee_firstname": "Test",
        "employee_surname": "Name",
        "employee_image": "9.jpg",
        "employee_status": "1",
        "company_id": "1",
        "company_name": "CDE",
        "company_hex": "99C440"
    }, {
        "employee_id": "49",
        "employee_firstname": "Testy",
        "employee_surname": "Test",
        "employee_image": "ce_holding.png",
        "employee_status": "1",
        "company_id": "1",
        "company_name": "CDE",
        "company_hex": "99C440"
    }, {
        "employee_id": "8",
        "employee_firstname": "Tester",
        "employee_surname": "McTest",
        "employee_image": "8.jpg",
        "employee_status": "1",
        "company_id": "1",
        "company_name": "CDE",
        "company_hex": "99C440"
    }]

然后我将这个JSON文件读入iOS应用程序以显示内容。

我有什么想法可以实现添加这些额外的节点?

非常感谢

西蒙

1 个答案:

答案 0 :(得分:0)

这样的事情可能会起到作用:

<?php    
//Before this you should have the data you want to insert in the JSON of each company. I guess you should get it from a database.
$json_data_c=array();
foreach($row as $rec_company){ //I supose you have the information in the $row variable after a query to the database
    $json_array['company_field1']=$rec_company['company_field1'];
    ....
    $json_data_c[$rec_company['company_id']]=$json_array;
}

//end of company information

$db=new PDO('mysql:dbname=DB;host=localhost;','username','pass');    
$row=$db->prepare('select * from Employee_JSON');  

$row->execute();//execute the query  
$json_data=array();//create the array  
$company_id_loop=-1;
foreach($row as $rec)//foreach loop  
{  
    if($company_id_loop!=$rec['company_id']){
        //insert here the json with the data of the company $rec['company_id']
        $json_array_company=$json_data_c[$rec['company_id']];
        array_push($json_data, $json_array_company); 
        $company_id_loop=$rec['company_id'];
    }
$json_array['employee_id']=$rec['employee_id'];  
    $json_array['employee_firstname']=$rec['employee_firstname'];  
    $json_array['employee_surname']=$rec['employee_surname'];  
    $json_array['employee_image']=$rec['employee_image'];
    $json_array['employee_status']=$rec['employee_status'];
    $json_array['company_id']=$rec['company_id']; 
    $json_array['company_name']=$rec['company_name']; 
    $json_array['company_hex']=$rec['company_hex'];  
//here pushing the values in to an array  
    array_push($json_data,$json_array);  

}  

//built in PHP function to encode the data in to JSON format  
echo json_encode($json_data);  

//write to json file
$fp = fopen('data/employees.json', 'w');
fwrite($fp, json_encode($json_data));
fclose($fp);


?>