2016-11-07 165 views
1

我有一个JSON数组,我需要将它转换为插入查询字符串, 有没有人有想法如何做到这一点?转换JSON数组插入到一个插入查询字符串在PHP

这里的JSON字符串

$array = '[ 
    { 
    "table":"customer", 
    "data": 
     [ 
     { 
      "name":"Johny", 
      "address":"jl. abc no 5", 
      "where" : 

      { 
       "customerid":1 
      } 

     }, 
     { 
      "name":"Doko", 
      "address":"jl. kerinci 7" 
      "where" : 

      { 
       "customerid":2 
      } 
     } 
     ] 
    }, 
    { 
    "table":"supplier", 
    "data": 
     [ 
     { 
      "id":123 
     }, 
     { 
      "id":234 
     } 
     ] 
    } 
] 
'; 

然后我用json_decode把它转换成一个数组

$obj = json_decode($array,true); 

这里的解决方法到目前为止,我所做的一切。

foreach($obj as $result){ 
    $table = $result['table'] . "</br>"; 
    $data = $result['data']; 
    $string = "INSERT INTO $table ("; 
    foreach($data as $subdata){ 
    foreach($subdata as $key=>$val){ 
     $string .= "$key,"; 
     $string .= ")VALUES ("; 
     $string .= "'$val'" . ","; 
    } 
    $string .= ");"; 
    } 
    echo $string."</br>"; 
} 

,但它不喜欢的工作,我想,

我需要的是将其转换成查询等预先

INSERT INTO customer(customerid,address)values('1','jl.abc no 5'); 
INSERT INTO customer(customerid,address)values('2','jl. kerinci no 7'); 
INSERT INTO supplier(id)values('123'); 
INSERT INTO supplier(id)values('234'); 

感谢。

PS:该数组可能超过两个数组,甚至只有一个。

============================================== =============================

更新:读数组然后将其拆分成更新查询字符串 像

UPDATE customer SET name="JOHNY", address="jl. abc no 5"; 
UPDATE customer SET name="Doko", address="jl. kerinci 7"; 

时“其中”项存在,并且忽略它当“其中”项不存在

+0

当你解码这是永远都只是两个数组?客户和供应商? –

+0

@ L.Herrera nope,它可能超过两个,或者可能只是一个。 – mabbs

+0

但不能超过两个?它可以只是客户?只有供应商? –

回答

2

而不是做在foreach的,我第一次使用的语句首先遍历数组,因为你的JSON有指标的组合和键值对。那就是:

$query = ""; 
    for($i = 0, $ctr = count($obj); $i < $ctr; $i++) { 
     for($x = 0, $ctr_data = count($obj[$i]["data"]); $x < $ctr_data; $x++) { 
      $query2 = array(); // After loop cleans the array 
      $query .= "INSERT INTO " . $obj[$i]["table"]; 
      $query .= "("; 
       foreach($obj[$i]["data"][$x] as $key => $value) { 
        $query2[] = $key; 
       } 
       $query .= implode(",", $query2) . ") VALUES"; // glue the commas 

       $query2 = array(); // After the first foreach cleans the array 

       foreach($obj[$i]["data"][$x] as $key => $value) { 
        $query2[] = "'$value'"; 
       } 
       $query .= "("; 
       $query .= implode(",", $query2) . ") <br>"; // glue the commas 
     } 
    } 

    echo $query; 

编辑:在您的情况下它的两个

  1. 第一个循环计数第一阵列的数量。
  2. 第二个循环计算键“数据”上的数组。
  3. 准备一个数组$ query2 = array();这样您就可以拥有关键“数据”上的键/值的容器。
  4. 获取索引“表”的名称。
  5. 第三个循环用于获取密钥的关键“数据”。
  6. 将密钥存储在$ query2中供以后使用。
  7. 使用implode函数,所有键都用逗号互相粘在一起。
  8. 再次准备数组$ query2来清理数组。
  9. 第四个循环是关键“数据”获取其值。
  10. 重复数6.
  11. 重复数7.
+0

就像魅力一样......想要进一步解释这个问题吗? – mabbs

+0

感谢您的帮助,但现在我面临另一个问题将数组转换为更新字符串,问题更新。 – mabbs

+0

那么,你可以通过重新使用这个INSERT循环来派生你的UPDATE。^_ ^ –

0

步骤1:创建类数据库。PHP来EXC查询代码波纹管

<?php 
/* 
    * Author: [email protected] 
    * Language: Vietnamme 
    * Site url: http://itvnsoft.com 
    * Youtube: Itvnsoft Web Developer 
    * Phone: 0986 421 127 
    * File Database.php 
    * khai báo các thông tin kết nối database 
    * ccs hằng số HOST DB_NAME DB_USER DB_PASS khai bóa bên file config.php 
    */ 
try { 
$db = new PDO('mysql:host='.HOST.';dbname='.DB_NAME, DB_USER, DB_PASS); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->exec("set names utf8"); 

function getAll($table,$limit = 10){ 
    global $db; 
    $sql = "SELECT * FROM $table LIMIT $limit"; 
    $stmt = $db->prepare($sql); 
    $stmt->execute(); 
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 
    return $stmt->fetchAll(); 
} 


function insert($table,$data){ 
    global $db; 
    if(isset($data) && is_array($data)){ 
     $files = array_keys($data); 
     $files = implode($files, ','); 
     $values = array_values($data); 
     $values = implode($values, "','"); 

     $sql = "Insert Into $table($files) values('$values')"; 
     // $conn->exec($sql) 
     $db->exec($sql); 
     return $db->lastInsertId(); 
    }else{ 
     return false; 
    } 

} 



    } catch (PDOException $e) { 
    die("Error!: " . $e->getMessage()); 
    } 

?> 

第2步:在你的PHP页面处理PHP JSON代码

include 'Database.php'; 

foreach($obj as $result){ 
    $table = $result['table'] . "</br>"; 
    $data = $result['data']; 
    insert($table,$data); 
}