Php array Werte zuordnen?
Hallo ich hätte noch eine kurze Frage:
Ich habe eine JSON Ausgabe (siehe Bild1), in der jedem Tag gemessene Werte zum Schlaf angelegt sind. Jetzt möchte ich jedem Tag (["date"], in gelb markiert, die drei jeweiligen Messwerte ["wakeupcount"], ["total_timeinbed"] und ["total_sleep_time"] (in rot markiert) zuordnen. Das "date" habe ich als array angelegt. Die drei Messwerte sind jedoch "objects". Nachdem ich die Messwerte ausgelesen habe, möchte ich diese in meiner Datenbank entsprechend anlegen (letzter Teil meines Codes).
Bild 1:
Dazu verwende ich folgenden Code (Zur besseren Übersicht habe ich dieses mal nur den [wakeupcount] Messwert in den Code gepackt):
{
$sleepanalyzer_sum_result = array();
foreach ($sleepanalyzer_sum_data->body->series as $serie) {
$sleepanalyzer_sum_result[$serie->date] = $measure;
$sleepanalyzer_sum_result[$serie->data->wakeupcount] = $wakeupcount;
}
echo "<pre>";
print_r($sleepanalyzer_sum_result);
echo "</pre>";
foreach ($sleepanalyzer_sum_result as $date => $measures) {
$sleepanalyzer_sum_query .= "INSERT INTO sleepanalyzer_sum_measures SET
wakeupcount ='" . $wakeupcount . "',
measure_timestamp = '" . $date . "'
;";
}
echo "<pre>";
echo $sleepanalyzer_sum_query;
echo "</pre>";
}
Meine Ausgabe sieht folgendermaßen aus:
Dabei habe ich das Problem, dass die einzelnen Messwerte nun auch als array angelegt sind. Wie schaffe ich es, dass diese jedoch dem einzelnen Datum als object zugeordnet werden? Dadurch passiert auch beim Einlesen der Datenbank der Fehler, dass ich die richtigen Werte nicht den richtigen Begriffen in meiner Tabelle zuordnen kann.
Vielen Dank!
1 Antwort
Ich würde an deiner Stelle Strings als Schlüssel für dein assoziatives Array verwenden:
$sleepanalyzer_sum_result['date'] = $measure;
$sleepanalyzer_sum_result['wakeUpCount'] = $wakeupcount;
Wenn in diesem Array mehrere Daten eingetragen werden, wäre stattdessen ein multidimensionales Array günstig:
$entry = array();
$entry['date'] = $measure;
$entry['wakeUpCount'] = $wakeupcount;
$sleepanalyzer_sum_result[] = $entry;
oder du legst dir ein Array an Objekten zu einem neuen Typ an.
Der neue Datentyp:
class SleepData {
private $date, $wakeUpCount;
public function __construct($date, $wakeUpCount) {
$this->date = $date;
$this->wakeUpCount = $wakeUpCount;
}
public function getDate() {
return $this->date;
}
public function getWakeUpCount() {
return $this->wakeUpCount;
}
}
Das Array innerhalb deiner Schleife:
$sleepanalyzer_sum_result[] = new SleepData($measure, $wakeupcount);
Zugriff auf einen bestimmten Eintrag:
$someIndex = // ...
$date = $sleepanalyzer_sum_result[$someIndex]=>getDate();