mit array[1] bekomme ich ja z.B. den ersten Datensatz mit den 3 Werten.
Wenn ich aber im gesamten Array nur das "Datum"-Fomat ändern will,
ist es dann möglich mit einer Abfrage eben alle "Datum" Werte zu
erhalten? Unabhängig der Länge des Arrays und unabhängig der anderen
Werte.
array[1]['Datum'] liefert mir das Datum des ersten Datensatzes, kann ich
die [1] durch etwas ersetzen, dass alle Datensätze beinhaltet?
Etwas wie array[*]['Datum'] mit dem Ergebnis
Das habe ich versucht. Aber bin leider nicht richtig vorangekommen.
Ich will von allen Datum-Werten im Array das Format ändern.
Ich würde also ungerne einen neuen Array entstehen lassen, sondern den
vorhandenen verändern.
Kannst du mir vielleicht etwas auf die Sprünge helfen? Bin zwar
grundsätzlich recht erfahren im Programmieren, aber PHP ist noch sehr
frisch :/
Habe bisher das hier aufgestellt. Ich komme leider nicht wirklich weiter
damit:
sid schrieb:> Wilslt Du das nur ändern oder auch das geänderte im resultats-array> peichern?
wo ist da der unterschied?
Ich habe den array nach der Sql Abfrage erstellt:
1
$data = array();
2
foreach ($result as $row) {
3
$data[] = $row;
4
}
Innerhalb dieses $data arrays wollte ich die 'Datum' Werte eben ändern
und auch speichern natürlich. Allerdings innherhalb dieses $data arrays.
Also ohne das ein neuer Array entsteht.
Probiere gerade noch die beiden Ansätze von euch aus, schonmal vielen
Dank!
Halt mal! Warum formatierst du das Datum nicht direkt bei der Abfrage
ins gewünschte Format? Dann sparst du dir das ganze umwandeln in PHP.
SELECT DATE_FORMAT(datenspalte, 'format') AS datum
T.roll schrieb:> Warum formatierst du das Datum nicht direkt bei der Abfrage> ins gewünschte Format?
Sehr gute Idee, aber auch das bringt mich gerade zur Verzweiflung.
Müsste das hier nicht genau das erreichen?
1
SELECT DATE_FORMAT(`Zeit`, 'YYYY-MM-DDThh:mm:ss[.mmm]') AS Datum FROM Daten
Ich brauche das ISO8601 Format. Ich dachte das ich mit der obigen
Abfrage dieses Format bekomme, allerdings ist der Wert der einzelnen
Zeilen jetzt 'YYYY-MM-DDThh:mm:ss[.mmm]' das hier... Ich stehe etwas auf
dem Schlauch.
Philipp K. schrieb:> Wieso nicht gleich Zeilenweise einlesen?
Macht das für mich einen relevanten Unterschied? Am Ende habe ich doch
auch ein array, mit den Werten. Ich will es ja nicht ausgeben, sondern
als Json an ein Javascript-Script übergeben. Das klappt auch alles.
Lediglich für das Format des Datums bin ich zu blöd :/
sid schrieb:> Wilslt Du das nur ändern oder auch das geänderte im resultats-array> peichern?
Daraus habe ich jetzt das hier gebastelt, was für mich eigentlich recht
vielversprechend war.
1
foreach ($result as $i=>$data[]) // Array aller SQL Zeilen zum query
2
{
3
foreach($data as $key=>$value) // SQL Zeile in $dataset
4
{
5
if($key=="Datum") // SQL Spaltenname
6
{
7
$time = strtotime($data[$i][$key]); <--- Zeile 54
8
$data[$i][$key] = date('c', $time);
9
}
10
}
11
}
Jetzt beschwert er sich aber hier:
1
Undefined offset: 0 on line <b>54</b>
Müsste ich in der markierten Zeile 54 mit dem Befehl nicht den
entsprechenden "Datum"- Eintrag erwischen?
N1klas schrieb:> Müsste das hier nicht genau das erreichen?SELECT DATE_FORMAT(`Zeit`,> 'YYYY-MM-DDThh:mm:ss[.mmm]') AS Datum FROM Daten> Ich brauche das ISO8601 Format. Ich dachte das ich mit der obigen> Abfrage dieses Format bekomme, allerdings ist der Wert der einzelnen> Zeilen jetzt 'YYYY-MM-DDThh:mm:ss[.mmm]' das hier... Ich stehe etwas auf> dem Schlauch.
Ähm, in MySQL/MariaDB schreibt man die Angaben im Format mit einem
Prozentzeichen. Zum Beispiel %Y für die vierstellige Jahresangabe.
https://mariadb.com/kb/en/date_format/
Und da ich gerade mal etwas Zeit habe, eine PHP-Lösung...
(Verwende aber trotzdem die SQL-Variante, da die viel schneller ist.)
N1klas schrieb:> sid schrieb:>> Wilslt Du das nur ändern oder auch das geänderte im resultats-array>> peichern?> Daraus habe ich jetzt das hier gebastelt, was für mich eigentlich recht> vielversprechend war.foreach ($result as $i=>$data[]) // Array aller SQL> Zeilen zum query> {> foreach($data as $key=>$value) // SQL Zeile in $dataset> {> if($key=="Datum") // SQL Spaltenname> {> $time = strtotime($data[$i][$key]); <--- Zeile 54> $data[$i][$key] = date('c', $time);> }> }> }> Jetzt beschwert er sich aber hier:Undefined offset: 0 on line <b>54</b>> Müsste ich in der markierten Zeile 54 mit dem Befehl nicht den> entsprechenden "Datum"- Eintrag erwischen?
weil es nicht $data[] ist sondern $data!
aber noch schlimmer:
das widerspricht sich mit
N1klas schrieb:> wo ist da der unterschied?> Ich habe den array nach der Sql Abfrage erstellt:$data = array();> foreach ($result as $row) {> $data[] = $row;> }>> Innerhalb dieses $data arrays wollte ich die 'Datum' Werte eben ändern
entweder $data ist die Zeile,
oder eben das array mit ALLEN ZEILEN des sql-queries
Also nochmal:
1
// $data ist ein Array von Arrays (zweidimensionales array)
2
foreach ($data as $index=>$sqlrow) // $data array aller rows
3
{
4
// $sqlrow ist ein Array
5
// im ersten durchlauf ist $sqlrow eine Kopie von $data[0]
6
// im zweiten ist $sqlrow die Kopie von $data[1] etc.
7
// änderst Du $sqlrow überschreibt das nicht $data[$index]!
8
foreach($sqlrow as $key=>$value) // einzelne Spalten einer Zeile
9
{
10
// $key ist der Spaltenname, $value der Inhalt
11
// jeweils als Kopie; wenn Du $value änderst ändert sich nichts an
12
// $sqlrow und noch weniger and $data[$index]
13
if($key=="Datum")
14
{
15
// $value enthält schon den zu verändernden Wert,
16
// kein Grund nach $data[$index][$key] zu fischen
17
// nochweniger eine Hilfsvariable zu bemühen wenn
18
// nur das Dein Ziel ist
19
$data[$index][$key] = strtotime($value);
20
21
// Denk daran, das überschreibt NUR $data[$index][$key]
22
// nicht aber $value, und auch $sqlrow[$key] bleibt unverändert!