2016-11-07 161 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); 
}