Das Komma muss weg...

Torsten Ernst

Mitglied
Hallo,

ich bin leider auf Hilfe angwiesen und hoffe das ich diese hier finde. Ich habe mir vor längerer Zeit eine PHP-Seite programmieren lassen, da ich selbst nicht das nötige Wissen besitze. Dieser Programmierer steht mir aber heute nicht mehr zur Verfügung. Vorab die grundlegenden Infos, hier ist der PHP-Code:

PHP:
series: [
  <?php
  $output = '';
  foreach ($this->modeMap as $mode => $modeBands) {
  $output .= "{ name: '$mode', data: [". implode(',', $modeBands) ."] }, " . PHP_EOL;
  }
  echo rtrim($output, ',');
  ?>
  ]

Und so sieht der Ausgabe Quelltext aus:

Code:
series: [
{ name: 'Unknown', data: [0,0,0,0,0,0,1,2,3,0,0,0,0,0,0,0] },
{ name: 'CW', data: [0,0,0,0,0,0,1,8,0,1,0,0,0,1,0,0] },
{ name: 'PSK31', data: [0,0,0,0,0,3,0,55,0,28,0,0,12,0,0,0] },
{ name: 'PSK63', data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
{ name: 'PSK125', data: [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0] },
{ name: 'QPSK31', data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
{ name: 'QPSK63', data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
{ name: 'QPSK125', data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
{ name: 'JT9', data: [0,0,0,2,0,0,1,9,0,1,0,0,0,0,0,0] },
{ name: 'JT65', data: [0,0,2,2,0,16,11,191,20,120,0,0,3,9,0,0] },
{ name: 'ROS', data: [0,0,0,0,0,0,0,3,0,2,0,0,3,0,0,0] },
{ name: 'OPERA', data: [6,0,0,0,0,0,0,2,0,0,0,1,2,0,0,5] },
{ name: 'SIM31', data: [0,0,0,0,0,1,0,5,0,0,0,0,0,0,0,0] },
{ name: 'SSB', data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
{ name: 'MFSK16', data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
{ name: 'CONTESTI', data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
{ name: 'SSTV', data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
{ name: 'OLIVIA', data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] },
{ name: 'HELL', data: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] }, ]

Es wird ein Chart ausgegeben. Leider funktioniert die Darstellung nicht im IE6.0. Alle anderen Browser funktionieren. Das Problem ist das letzte Komma in der letzten Zeile vor der eckigen Klammer ganz am Ende * name: 'Hell' .... ]}, ] *. Da darf es nicht mehr erscheinen, in den vorherigen Zeilen muss es aber vorhanden sein. Ich habe schon gegoogelt und bin dabei auf die Fuktion "rtrim" gestoßen. Damit wird ja bereits jetzt schon das Komma nach der letzten Zahl entfernt. Nun quäle ich mit damit rum komme ich nicht mehr weiter. :( Kann mir bitte jemand einen Tipp geben?

Stumpi
 
Hallo Stumpi,

der Programmierer war schlecht, er hätte json_encode() verwenden sollen, denn dann hätte man solche Probleme nicht.

Eine sehr einfache Lösung:
PHP:
$first = true;
foreach ($this->modeMap as $mode => $modeBands) {
  if ($first) {
    $first = false;
  }
  else {
    $output .= PHP_EOL . ',';
  }
  $output .= "{ name: '$mode', data: [". implode(',', $modeBands) ."] }";
}

rtrim() funktioniert nicht, da im anfänglichen Code hinten nach dem Komma noch ein Leerzeichen und PHP_EOL folgt. Diese müsste man miteinbeziehen oder einfach obigen Code nutzen.
 
Upps, das geht ja hier fix. Ich hatte kurz zuvor ein Erfolgserlebnis, diese Variante habe ich probiert und es funktioniert:

PHP:
$output = '';
foreach ($this->modeMap as $mode => $modeBands) {
$output .= "{ name: '$mode', data: [". implode(',', $modeBands) ."] }, " . PHP_EOL;
}
$output = substr($output, 0, -2);       
echo rtrim($output, ',');

Ist das so ok oder Mist? Schon komisch, da teste ich tagelang rum, nichts geht und kurz nach dem Post findet man dann plötzlich eine Lösung. :confused:

ComFreek, danke für die schnelle Hilfe, dein Code habe ich auch eben getest geht aber leider nicht. So sieht der Ausgabe Quelltext dann aus:

Code:
series: [                 ]

Stumpi
 
Zuletzt bearbeitet:
Hmm, bist du sicher, dass du meinen Code 1:1 eingefügt hast? Ich sehe gerade keinen Fehler.

substr() ist natürlich eine noch schnellere Lösung ;) Das kannst du schon so nutzen. Wenn schon, würde ich den ganzen Code umkrempeln, damit er json_encode() nutzt. Wenn du eine richtige Datenstruktur vorliegen hast, dann kannst du jedes erdenkliche Format daraus machen (JSON, XML etc.).
 
Hi,

Leider funktioniert die Darstellung nicht im IE6.0

Was für ein Wunder ;-) Ist die Kompatibilität mit dem uralt IE wirklich notwendig und gefordert? Der Browser ist ein einziges Fiasko und sollte keinesfalls mehr verwendet werden...
Rein von der Syntax her ist die zusätzliche Angabe des Kommatas korrekt, dies ist wirklich eine (weitere) Eigenart des alten IE.

Ich würde auf den alten IE keine Rücksicht mehr nehmen, das Problem mit dem Kommata wird sicherlich nicht dein letztes mit dem Browser sein...

Grüße,
BK
 
Ja Bratkartoffel, du hast Recht. Mit allen Browser klappt das, nur der IE 6 spinnt jedesmal rum. Aber ich lass das jetzt erst einmal so wie oben beschrieben, nun läuft es ja. Mit json_encode() werde ich mich aber noch beschäftigen. Danke an alle für die schnelle und unkomplizierte Hilfe. Das Forum hier ist echt super! :)

Stumpi
 
Zurück