2016-08-04 21 views
0

Sorry für die Frage, ich versuche, einige Json-Daten in meiner Datenbank zu speichern. Das Problem ist, ich weiß nicht, wie man irgendeinen der "Parent-Namen" bekommt. Der "Elternname" ist immer der gleiche wie der Kind "Name".PHP - Objektschlüssel von JSON speichern

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

Wenn Elternname und Kindname immer gleich sind, was ist das Problem? Benutze einfach den doppelten Namen des Kindes. Andernfalls müssen Sie die Funktion 'key()' verwenden, um den Schlüssel aus dem Array abzurufen. –

+0

wo ist das in diesem json 'parent_name: {}' - 'foreach ($ array als $ parent_name => $ row)' vielleicht? – ArtisticPhoenix

+0

Das Problem ist, dass ich nicht weiß, was der parent_name jedes Mal sein wird. @GrzegorzGajda – Alex

Antwort

0

Sie müssen die Schlüssel aus der aktuellen Array-Ebene in der Schleife zuzugreifen, können Sie tun, indem

foreach($array as $parent_name => $row) 

Hinzufügen einer Variablen in vor der $row Variable denke dies wie Array-Zugriff

array('key' => 'value') 

Gleiches Angebot. Jetzt, da Sie sich in der Ebene "parent_name" des Arrays befinden, müssen Sie den zusätzlichen Zugriffsschlüssel nicht dort eingeben. Also für diese

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

Sie nur

tun können
$row["7_days"]["volume"] 

Da Sie in diesem Teil der 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 
     } 

Dann arbeiten werden, weil Sie haben eine äußere Array-Wrapper auf json [{ .. }] diese eckigen Klammern. Möglicherweise müssen Sie $array[0] oder $array = reset($array) tun. Das Zurücksetzen ist wahrscheinlich besser (wenn dies der Fall ist), weil Sie einige Warnmeldungen von PHP vermeiden, wenn das Array leer ist. Wenn Sie versuchen, auf einen Schlüssel von 0 zuzugreifen, erhalten Sie eine undefinierte Indexwarnung, wenn sie leer ist.