2016-04-28 4 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": [] 
     } 
     ] 
    } 
    ] 
} 

:私は、データベース内のこれらの件のデータを挿入するforeachの

$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']; 

} 
} 

終了。ここでの問題は次のとおりです。

複数のline_itemsがある場合は、データベースに新しい行を作成する必要があります。挿入専用:numberおよび追加のline_items

line_itemsは1つしか作成されていないが、2つだけがline_itemの配列を持つ20の異なるデータベース行が作成されていることに注意してください。どうすればこの仕事をすることができますか?私はこのような何かを試してみました

$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 --> 

しかし、私は、これは仕事ができることをそうは思いません。どのように私はこの権利を作ることができるアイデアはありますか? 詳細をお知らせください。ありがとうございました!

にはどうすれば件のデータを挿入しています:

$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です。そして、2番目のforeachループの最後には、mysqli_stmt_execute($stmt);があります。これはうまくいきます。 if文または別のforeachループを見つけるべきロジックを解決する助けが必要なので、今度は配列が複数あるときに新しい行を作ることができる。number。ご提供JSON文字列に基づいて

+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_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, ...); 
    } 
} 
関連する問題