言語
PHP5.3
作りたいもの
GETパラメータ「?method=getStation&x=経度&y=緯度」でアクセスされたら、モックアップの配列の中から整合するものものだけを、全てAPIにしたい。
できたこと
・GETパラメーターによって整合するもの表示
・単純にechoしたら、整合するデータ全て表示
・複数整合した場合、整合する中で一番下のデータのみAPI化(表示)
要件
・複数整合した場合、整合する中で一番下のデータのみしかAPI化(表示)できません。これを整合するすべてのデータをAPI化(表示)したい。
コード全文
phpのビルトインサーバーで動きます。
ディレクトリ webapi/api.php
こんな感じでたたくと配列の一番下データが表示されます。
本来はその上のデータと2個表示されなければおかしい。
http://localhost:8000/api.php?method=getStation&x=139.8&y=35
php
1<?php 2header('Content-Type: application/json; charset=UTF-8'); 3 4// データリソース(モックアップ) 5$db['db'] = array( 6 'station' => array( 7 array ( 8 'name' => '兵庫', 9 'prefecture' => '兵庫県', 10 'line' => 'JR神戸線', 11 'x' => 135.1952558, 12 'y' => 34.6945454, 13 'postal' => '6770039', 14 'distance' => '320m', 15 'prev' => '元町', 16 'next' => '灘' 17 ), 18 array ( 19 'name' => '東京', 20 'prefecture' => '東京都', 21 'line' => 'JR山手線', 22 'x' => 139.7673068, 23 'y' => 35.6809591, 24 'postal' => '6770039', 25 'distance' => '150m', 26 'prev' => '有楽町', 27 'next' => '神田' 28 ), 29 array ( 30 'name' => '神田', 31 'prefecture' => '東京都', 32 'line' => 'JR山手線', 33 'x' => 140.7673068, 34 'y' => 35.6809591, 35 'postal' => '6770039', 36 'distance' => '150m', 37 'prev' => '東京', 38 'next' => '秋葉原' 39 ), 40 ), 41); 42 43if(isset($_GET['method'])) { // methodでGET送信 44 $getX = htmlspecialchars($_GET['x']); // xでGET送信 45 $getY = htmlspecialchars($_GET['y']); // yでGET送信 46 47 foreach ($db as $val) { 48 foreach ($val['station'] as $val) { 49 $name = $val['name']; 50 $prefecture = $val['prefecture']; 51 $line = $val['line']; 52 $longitude = floatval($val['x']); 53 $latitude = floatval($val['y']); 54 $postal = $val['postal']; 55 $distance = $val['distance']; 56 $prev = $val['prev']; 57 $next = $val['next']; 58 59 // GETパラメーターによって整合するもの表示 60 if ($longitude+1 >= $getX 61 && $getX >= $longitude-1 62 && $latitude+1 >= $getY 63 && $getY >= $latitude-1) { 64 65 // 単純にecho 66 // 【検証済】こちらは整合するもの全て表示できている 67 // echo $name; 68 69 // JSONで表示 70 // 【問題点】複数整合しても、整合する中で一番下の配列しか表示されない 71 // 【要件】 複数整合した場合、全て表示 72 $arr['response'] = array( 73 'station' => array( 74 array ( 75 'name' => $name, 76 'prefecture' => $prefecture, 77 'line' => $line, 78 'x' => $longitude, 79 'y' => $latitude, 80 'postal' => $postal, 81 'distance' => $distance, 82 'prev' => $prev, 83 'next' => $next, 84 ), 85 ), 86 ); 87 } 88 } 89 } 90} else { 91 $arr['status'] = 'no request'; 92} 93 94print json_encode($arr, JSON_PRETTY_PRINT);
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。