2016-08-04 11 views
0

noobieの質問に申し訳ありませんが、私はいくつかのjsonデータを自分のデータベースに保存しようとしています。問題は、 "parent_names"を取得する方法がわかりません。 "parent_name"は、常に子の "name"と同じです。jsonからオブジェクトキーを保存する

価格-data.json

[ 
    { 
     "Flag": { 
      "name": "Flag", 
      "safe_price": "118.31", 
      "safe_net_price": "110.60", 
      "total_volume": 3148, 
      "7_days": { 
       "median_price": "118.31", 
       "lowest_price": "100.00", 
       "highest_price": "132.25", 
       "volume": 94 
      } 
     }, 
     "Pole": { 
      "name": "Pole", 
      "safe_price": "81.21", 
      "safe_net_price": "70.62", 
      "total_volume": 1, 
      "7_days": { 
       "volume": 0 
      } 
     }, 
     "Net": { 
      "name": "Net", 
      "safe_price": "0.89", 
      "safe_net_price": "0.84", 
      "total_volume": 763, 
      "7_days": { 
       "median_price": "0.89", 
       "lowest_price": "0.65", 
       "highest_price": "1.08", 
       "volume": 30 
      } 
     } 
    } 
] 

あなたは、ループ内の現在のアレイレベルからキーにアクセスする必要があるPHP

$filename = "price-data.json"; 
$data = file_get_contents($filename); 
$array = json_decode($data, true); 


foreach($array as $row) 
{ 
     $sql = "INSERT INTO table_all_prices(parent_name, name, safe_price, safe_net_price, total_volume, median_price, lowest_price, highest_price, volume) VALUES (
     '".$row["parent_name"]."', 
     '".$row["parent_name"]["name"]."', 
     '".$row["parent_name"]["safe_price"]."', 
     '".$row["parent_name"]["safe_net_price"]."', 
     '".$row["parent_name"]["total_volume"]."', 
     '".$row["parent_name"]["7_days"]["median_price"]."', 
     '".$row["parent_name"]["7_days"]["lowest_price"]."', 
     '".$row["parent_name"]["7_days"]["highest_price"]."', 
     '".$row["parent_name"]["7_days"]["volume"]."' 
    )";  
} 
echo "All Prices inserted to database"; 
+1

parent_nameとchildの名前が常に同じ場合、何が問題なのですか?子供の名前の2倍を使用してください。それ以外の場合は、配列からキーを取得するために 'key()'関数を使用する必要があります。 –

+0

ここで、jsonの 'parent_name:{}' - 'foreach($ array as $ parent_name => $ row)'というのでしょうか? – ArtisticPhoenix

+0

問題は、毎回parent_nameが何になるのか分かりません。 @GrzegorzGajda – Alex

答えて

0

、あなたは

foreach($array as $parent_name => $row) 
であることを行うことができます

$row変数の前に変数を追加すると、このような配列アクセスが考えられます

array('key' => 'value') 

同じ扱いです。これで、配列の "parent_name"レベルにあるため、そこに追加のアクセスキーを入れる必要はありません。あなたはその後、JSON

 "name": "Net", 
     "safe_price": "0.89", 
     "safe_net_price": "0.84", 
     "total_volume": 763, 
     "7_days": { 
      "median_price": "0.89", 
      "lowest_price": "0.65", 
      "highest_price": "1.08", 
      "volume": 30 
     } 

のこの部分で働くことになりますので、この

$row["parent_name"]["7_days"]["volume"] 

のためにあなただけの

$row["7_days"]["volume"] 

を行うことができますので、あなたのJSONの外側の配列のラッパーを持っているので、 [{ .. }]これらの角括弧。 $array[0]または $array = reset($array)を行う必要があります。配列が空の場合、PHPからの警告メッセージが表示されないようにするため、おそらくリセットが良いでしょう(そのような場合には)。基本的に 0のキーにアクセスしようとすると、空であれば未定義のインデックス警告が表示されます。

関連する問題