2016-04-07 21 views
4

phpを使用してjsonにmysqlデータを取得しようとしていて、後でurlにアクセスしようとしています。私はjsonでデータを取得していますが、フォーマットが必要です。以下はjsonを取得するための私のPHPコードです。mysqlデータをjsonの形式で出力する必要があります

header('Content-Type: application/json'); 
include('dbhconfig.inc.php'); 

$response = array(); 

$stmt = $dbh->prepare("SELECT * FROM venderlist"); 
$stmt->execute(); 
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
{ 
    $response['results'] = $rows; 
    } 
echo json_encode($response); 

そして、私のJSONデータは、すべての

{"results":[{"id":"1","vendname":"Genie Events","address":"15, Lower Ground Floor, Lajpat Nagar, Delhi - 110024, Near National Park ","contact":"(91)-11-33437065","contact_o":"(91)-11-40666522","est":"2010","website":"www.genieevents.com","email":"","zip":"110024","latitude":"1.28525","longitude":"103.775464","latlon":"1.28525,103.775464","type":"organisers"}, 

まずその構造が適切に表示されないように怒鳴る

を示します。そして現在はlatlonは "latlon":"1.28525,103.775464"のように表示されますが、結果が必要です。 "latlon":[1.28525,103.775464]

私のjson変数名latlonに追加する方法。

答えて

4

もちろん、文字列からデータの部分を分解する必要があります。両方の浮動小数点値を内部に持つ配列単位としてそれらを設定する必要があります。

これらをすべてフェッチしたら、少し操作する必要があります。

explodeは、その文字列の最初の文字に,を使用できます。その配列は[]になります。しかし、そこで終わるわけではありません。展開された要素はまだ文字列なので、floatvalですべての要素をマップして、arrray_mapを使用することができます。

したがって、すべてのすべてで、それだけで次のようになります。私は同じことを考えていた

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
foreach($rows as &$r) { // with reference 
    // explode with comma, map with floatval 
    $r['latlon'] = array_map('floatval', explode(',', $r['latlon'])); 
} 
echo json_encode(array('results' => $rows)); // json encode 
+1

。私はあなたがこれを次のように1行で行うことができると思います: 'echo json_encode(array '' results '=> array_map(function($ row){return array_map(' floatval '、explode('、 '$ row [' latlon '] ));}; $行))); – Ohgodwhy

+1

@Ohgodwhy笑、1つのライナー配列関数の呪文は、もちろん、それは常にあなたの操作が成功です – Ghost

+0

を持っています。ありがとうございました。私は欲しいものを手に入れました。 –

関連する問題