2016-04-28 58 views
0

我的JSON:棘手的問題。插入JSON數據

{ 
    "orders": [ 
    { 
     "id": 10, 
     "number": 10, 
     "line_items": [ 
     { 
      "id": 3, 
      "sub": "21.00", 
      "sub_tax": "0.00", 
      "total": "21.00", 
      "total_tax": "0.00", 
      "quantity": 1, 
      "tax_class": null, 
      "meta": [] 
     } 
     ] 
    } 
    ] 
} 

什麼我都不得不時刻:

$json = json_decode(file_get_contents(JSON_URL), true); 
foreach ($json as $u => $z){ 
    foreach ($z as $n => $line){ 
$number = $line['number']; 
$line_item_id = $line['line_items'][0]['id']; 
      $line_item_sub = $line['line_items'][0]['sub]; 
      $line_item_sub_tax = $line['line_items'][0]['sub_tax']; 
      $line_item_total = $line['line_items'][0]['total']; 
      $line_item_total_tax = $line['line_items'][0]['total_tax']; 
      $line_item_quantity = $line['line_items'][0]['quantity']; 
      $line_item_tax_class = $line['line_items'][0]['tax_class']; 

} 
} 

我在數據庫中插入這些DATAS在foreach結束。這裏的問題如下:

如果有多個line_items,它應該在數據庫中創建新行。僅插入:number和附加line_items

請記住,可以說有20個不同的數據庫行創建,其中只有一個line_items,但只有其中兩個具有多個line_item數組。我怎麼能做這個工作?

我已經試過這樣的事情:

$countid = $line['line_items'][0]['id']; 
     if(count($countid) > 1){ 
      $number = $line['order_number']; 
      $line_item_id = $line['line_items'][0]['id']; 
      $line_item_sub = $line['line_items'][0]['sub']; 
      $line_item_sub_tax = $line['line_items'][0]['sub_tax']; 
      $line_item_total = $line['line_items'][0]['total']; 
      $line_item_total_tax = $line['line_items'][0]['total_tax']; 
      $line_item_quantity = $line['line_items'][0]['quantity']; 
      $line_item_tax_class = $line['line_items'][0]['tax_class']; 
     } else { 
<!-- Insert data normally --> 

但我不這麼認爲,這可能是工作。你有什麼想法,我怎麼能做到這一點? 讓我知道我是否可以提供更多信息。謝謝!

如何我插入DATAS:

$con = mysqli_connect("111.11.111.11","username","password","database") or die('Could not connect: ' . mysql_error()); 

// prepare your insert query 
$stmt = mysqli_prepare($con, 'INSERT INTO table_name(values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names, values_names,) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'); 

// bind the upcoming variable names to the query statement 
mysqli_stmt_bind_param($stmt, 'isssssssssssssssssssssssssssssssssssssssssssss', $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables $values_variables); 

foreach循環抓住每排約45個不同的項目。其中12個來自line_items。而在第二個foreach循環結束時,有mysqli_stmt_execute($stmt);這工作正常。需要幫助來解決我應該找到if語句或其他foreach循環的邏輯,以便每當當前number下有多個line_items數組時,我可以創建新行。

+0

請您談一下插入到數據庫中。請在您嘗試這樣做的地方添加代碼。 – colburton

+0

@colburton'mysqli_stmt_execute($ stmt);'和'$ stmt'是我的數據庫的正常連接信息。用INSERT INTO當然。數據像魅力一樣插入到數據庫中。只有我需要幫助的是解決邏輯,當有多個'line_items'數組時,我只能插入'number'和另外的'line_items'。目前它正確地在數據庫中插入數據,但如果有多個'line_items'數組,它應該創建另一個數據庫ROW,並在其中插入'number'和附加'line_items'。 –

+0

那麼答案很可能涉及foreach($ line ['line_items'] ...),但除非您提供瞭如何創建INSERT語句,否則我們無法幫助您。 – colburton

回答

0

根據您提供的JSON字符串我假定這段代碼解決您的問題:

$json = json_decode(file_get_contents(JSON_URL), true); 
foreach ($json['orders'] as $line) { 
    foreach ($line['line_items'] as $item) { 
     // no need to distinguish between 1 or more items 
     // foreach handles both cases 
     $number    = $line['number']; 
     $line_item_id  = $item['id']; 
     $line_item_sub  = $item['sub']; 
     $line_item_sub_tax = $item['sub_tax']; 
     $line_item_total  = $item['total']; 
     $line_item_total_tax = $item['total_tax']; 
     $line_item_quantity = $item['quantity']; 
     $line_item_tax_class = $item['tax_class']; 

     mysqli_stmt_bind_param($stmt, 'isssssssssssssssssssssssssssssssssssssssssssss', $number, $line_item_id, $line_item_sub, ...); 
    } 
}