質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

798閲覧

【php】WebAPIを実装したのですがJSONが複数表示されない

DaisukeMori

総合スコア226

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/08/02 05:18

言語

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);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

$arr['response'] = array(

この部分、どうやら配列が初期化されて代入されているそうでした。

以下のようにしたら無事動きました。
$arr['response'][] = array(

投稿2021/08/02 06:12

DaisukeMori

総合スコア226

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問