2017-01-01 2 views
2

Ich beginne, PHP zu verstehen, wie ich mehr Code schreibe und ich stieß gerade auf ein Problem der Ausgabe von Daten als JSON, wo die Feld-ID als varchar Typ angegeben ist, aber die darin gespeicherten Werte sind gemischte Zeichenfolgen, Ints und Doppel.Wie gibt man verschiedene Werttypen aus, wenn das Feld einen bestimmten Typ im PHP-Skript hat?

Hier ist, was meine Datenbank-Tabelle wie folgt aussieht:

map_type  map_value 
----------------------------- 
link   www.google.com 
zoom   18 
lat   32.91 
long   -117.1 

Die Felder map_type und map_value sind vom Typ varchar.

Ich schrieb ein paar einfachen Code zur Ausgabe der Daten:

$sql = "select map_type, map_value from table"; 

$q = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection)); 

//create an array 
$jsonData = array(); 

while($row = mysqli_fetch_assoc($q)) 
{ 
    $jsonData[$row['map_type']] = $row['map_value']; 
} 

echo json_encode($jsonData); 

Und die Ausgabe erhalten:

{ 
    "link": "www.google.com", 
    "zoom": "8", 
    "lat": "32.91", 
    "long": "-117.1", 
} 

Wie Sie aus map_value sehen können, gibt es eine Mischung aus Streichern, int, und Doppel.

Nach dem Lesen, ich weiß, dass mysqli_fetch_assoc nur die Daten als Zeichenfolgen ausgibt, so muss ich explizit den Rückgabetyp Wert der gewünschten Feld Wert angeben.

Doch wie kann ich den anderen Rückgabetyp Werte sogar angeben, wenn das Feld map_value vom Typ varchar?

Um zu zeigen, was ich meine, wie kann ich diese Ausgabe, wo der Wert von "Link" wird eine Zeichenfolge sein, der Wert von "Zoom" wird ein int, und die Werte von "lat" und "lang" bei dem Versuch, wird verdoppelt

{ 
    "link": "www.google.com", 
    "zoom": 8, 
    "lat": 32.91, 
    "long": -117.1, 
} 

sein PHP zu lernen, was ich versucht habe, so weit zu tun: den folgenden Code

1. hinzufügen, bevor die Daten in dem Array zu speichern:

`$row['map_value'] = doubleval($row['map_value']);`. 

Wie jedoch offensichtlich ist, gibt der Wert in "link" eine zurück, weil es versucht, die Zeichenfolge in ein Double zu konvertieren.

2. Ich versuchte auch, wie etwas zu tun:

$row['zoom'] = intval($row['zoom']) 
$row['lat'] = doubleval($row['lat']) 
$row['long'] = doubleval($row['long']) 

jedoch die Ausgabe leer ist, und ich kam der Grund zu erkennen, weil das nicht existiert.

Wie kann ich dieses Dilemma lösen?

+0

Es sieht für mich aus wie Ihre DB-Struktur ist sehr begrenzt (auf einen einzigen Eintrag beschränkt) und möglich, nicht was Sie wirklich wollen. Es scheint zum Beispiel nicht so zu sein, dass Sie mehr als eine einzige Kartendatenerfassung haben können, da 'map_type' Variablen auflistet, aber die Variablen sollten eigentlich die DB-Tabellenspalten sein. – Tigger

Antwort

3

Die Funktion, die Sie suchen, ist floatval.

Sie können auch is_numeric() verwenden, um zu testen, ob die Zeichenfolge wie eine Zahl aussieht.

while($row = mysqli_fetch_assoc($q)) 
{ 
    $value = is_numeric($row['map_value']) ? floatval($row['map_value']) : $row['map_value']; 
    $jsonData[$row['map_type']] = $value; 
} 

Es ist nicht notwendig, zu entscheiden, ob floatval() oder intval() zu nennen. PHP behandelt Floats ohne Bruch als ganze Zahlen.

+0

gold! ... "je mehr du weißt" :) – Pangu

Verwandte Themen