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

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

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

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

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

API

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

Q&A

解決済

1回答

2919閲覧

多次元配列の値の取得の仕方について

c_php

総合スコア29

JSON

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

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

API

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

0グッド

0クリップ

投稿2019/10/02 15:13

編集2019/10/02 15:17

openBDという書籍のデータをjson形式で取得できるAPIがあります。
そこからデータを取得し、PHPで処理を行っております。

該当のソースコード

PHP

1<?php 2 $url = "https://api.openbd.jp/v1/get?isbn="; 3 4 $isbn = "978-4-434-26619-5"; 5 $isbn_int = str_replace("-", "", $isbn); 6 7 $result = $url.$isbn_int; 8 9 $json = file_get_contents($result); 10 11 #文字コードを文字化けしないようにする。 12 $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 13 14 $arr = json_decode($json,true); 15 16 $isbn_13 = $arr[0]['onix']['RecordReference']; 17 18 19var_dump($isbn_13); 20var_export($arr); 21?>

表示結果

json

1string(13) "9784434266195" 2array ( 3 0 => 4 array ( 5 'onix' => 6 array ( 7 'RecordReference' => '9784434266195', 8 'NotificationType' => '03', 9 'ProductIdentifier' => 10 array ( 11 'ProductIDType' => '15', 12 'IDValue' => '9784434266195', 13 ), 14 'DescriptiveDetail' => 15 array ( 16 'ProductComposition' => '00', 17 'ProductForm' => 'BA', 18 'ProductFormDetail' => 'B119', 19 'TitleDetail' => 20 array ( 21 'TitleType' => '01', 22 'TitleElement' => 23 array ( 24 'TitleElementLevel' => '01', 25 'TitleText' => 26 array ( 27 'collationkey' => 'ジョウモンジンノニホンシ', 28 'content' => '縄文人の日本史', 29 ), 30 'Subtitle' => 31 array ( 32 'collationkey' => 'ジョウモンジンカラアイヌヘ', 33 'content' => '縄文人からアイヌへ', 34 ), 35 ), 36 ), 37 'Contributor' => 38 array ( 39 0 => 40 array ( 41 'SequenceNumber' => '1', 42 'ContributorRole' => 43 array ( 44 0 => 'A01', 45 ), 46 'PersonName' => 47 array ( 48 'collationkey' => 'サワダ ケンイチ', 49 'content' => '澤田 健一', 50 ), 51 'BiographicalNote' => '昭和39年(1964)札幌市生まれ。同志社大学工学部卒業。 52既存の枠にとらわれず、歴史・考古学を独自に学ぶ。思いつくまま読み・調べ・歩き・聞き・見ることを旨とし、文献やデータを忠実に読み解き歴史の事実に迫ることを目指している。', 53 ), 54 ), 55 'Language' => 56 array ( 57 0 => 58 array ( 59 'LanguageRole' => '01', 60 'LanguageCode' => 'jpn', 61 'CountryCode' => 'JP', 62 ), 63 ), 64 'Extent' => 65 array ( 66 0 => 67 array ( 68 'ExtentType' => '11', 69 'ExtentValue' => '206', 70 'ExtentUnit' => '03', 71 ), 72 ), 73 'Subject' => 74 array ( 75 0 => 76 array ( 77 'SubjectSchemeIdentifier' => '78', 78 'SubjectCode' => '0095', 79 ), 80 1 => 81 array ( 82 'SubjectSchemeIdentifier' => '79', 83 'SubjectCode' => '14', 84 ), 85 2 => 86 array ( 87 'SubjectSchemeIdentifier' => '20', 88 'SubjectHeadingText' => '縄文;おもしろい;アイヌ;歴史;弥生;北海道', 89 ), 90 ), 91 ), 92 'CollateralDetail' => 93 array ( 94 'TextContent' => 95 array ( 96 0 => 97 array ( 98 'TextType' => '02', 99 'ContentAudience' => '00', 100 'Text' => '今まで常識とされてきた日本の歴史は正しいのか?これまで考えられてきたアイヌ、縄文人、弥生人の関係を根底から覆す渾身の書。', 101 ), 102 1 => 103 array ( 104 'TextType' => '02', 105 'ContentAudience' => '04', 106 'Text' => '今まで常識とされてきた縄文から続く日本の歴史は、本当に正しいのか? これまで考えられてきたアイヌ、縄文人、弥生人の関係を根底から覆す、現在の歴史観に一石を投じる渾身の書。', 107 ), 108 2 => 109 array ( 110 'TextType' => '03', 111 'ContentAudience' => '00', 112 'Text' => 'これが本当の縄文時代だ! 113今まで常識とされてきた縄文から続く日本の歴史は、本当に正しいのか? 114 115縄文時代から連綿と続く日本の歴史。 116一般に語られる事実に含まれる不可解な謎は、アイヌの視点を通すことにより解き明かされる!これまで考えてこられたアイヌ、縄文人、弥生人の関係を根底から覆す、現在の歴史観に一石を投じる渾身の書。 117 118(中略)しかし、それは完全なる誤りである。', 119 ), 120 3 => 121 array ( 122 'TextType' => '04', 123 'ContentAudience' => '00', 124 'Text' => '目次 125はじめに アイヌとは 126序章一 インディアンの祖先は日本人? 127序章二 小さい田んぼ、太い田んぼ 128一   縄文以前(旧石器時代) 129二   DNAから見る縄文日本人 130三   縄文時代のはじまり 131四   縄文人のくらし 132五   イノシシ祭り 133六   クマ祭り、イオマンテ 134七   縄文語、アイヌ語 135八   縄文語地名と大和朝廷が名付けた地名 136九   北海道の縄文遺跡 137十   大川遺跡(余市町) 138十一  海民 139十二  共通する神話 140十三  夷(えみし・えびす) 141十四  素戔嗚尊 142 143参考資料', 144 ), 145 ), 146 'SupportingResource' => 147 array ( 148 0 => 149 array ( 150 'ResourceContentType' => '01', 151 'ContentAudience' => '01', 152 'ResourceMode' => '03', 153 'ResourceVersion' => 154 array ( 155 0 => 156 array ( 157 'ResourceForm' => '02', 158 'ResourceVersionFeature' => 159 array ( 160 0 => 161 array ( 162 'ResourceVersionFeatureType' => '01', 163 'FeatureValue' => 'D502', 164 ), 165 1 => 166 array ( 167 'ResourceVersionFeatureType' => '04', 168 'FeatureValue' => '9784434266195.jpg', 169 ), 170 ), 171 'ResourceLink' => 'https://cover.openbd.jp/9784434266195.jpg', 172 ), 173 ), 174 ), 175 ), 176 ), 177 'PublishingDetail' => 178 array ( 179 'Imprint' => 180 array ( 181 'ImprintIdentifier' => 182 array ( 183 0 => 184 array ( 185 'ImprintIDType' => '24', 186 'IDValue' => '4032', 187 ), 188 1 => 189 array ( 190 'ImprintIDType' => '19', 191 'IDValue' => '434', 192 ), 193 ), 194 'ImprintName' => '柏艪舎', 195 ), 196 'Publisher' => 197 array ( 198 'PublishingRole' => '01', 199 'PublisherIdentifier' => 200 array ( 201 0 => 202 array ( 203 'PublisherIDType' => '24', 204 'IDValue' => '4032', 205 ), 206 1 => 207 array ( 208 'PublisherIDType' => '19', 209 'IDValue' => '434', 210 ), 211 ), 212 'PublisherName' => '星雲社', 213 ), 214 'PublishingDate' => 215 array ( 216 0 => 217 array ( 218 'PublishingDateRole' => '01', 219 'Date' => '20191002', 220 ), 221 1 => 222 array ( 223 'PublishingDateRole' => '25', 224 'Date' => '20190922', 225 ), 226 ), 227 ), 228 'ProductSupply' => 229 array ( 230 'MarketPublishingDetail' => 231 array ( 232 'PublisherRepresentative' => 233 array ( 234 0 => 235 array ( 236 'AgentRole' => '08', 237 'AgentIdentifier' => 238 array ( 239 0 => 240 array ( 241 'AgentIDType' => '01', 242 'IDTypeName' => '取引コード', 243 'IDValue' => '4032', 244 ), 245 ), 246 'AgentName' => '星雲社', 247 ), 248 ), 249 'MarketPublishingStatus' => '00', 250 'MarketPublishingStatusNote' => '1;1', 251 ), 252 'SupplyDetail' => 253 array ( 254 'ReturnsConditions' => 255 array ( 256 'ReturnsCodeType' => '04', 257 'ReturnsCode' => '03', 258 ), 259 'ProductAvailability' => '99', 260 'Price' => 261 array ( 262 0 => 263 array ( 264 'PriceType' => '03', 265 'PriceAmount' => '1300', 266 'CurrencyCode' => 'JPY', 267 ), 268 ), 269 ), 270 ), 271 ), 272 'hanmoto' => 273 array ( 274 'toji' => '並製', 275 'zaiko' => 11, 276 'maegakinado' => 'はじめに アイヌとは 277 278アイヌとはじめて出合ったのは小学校の授業であった。先生の話では「アイヌは数を数えられないので鮭十尾を和人に渡すとき、和人に『はじめ、一、二、三、四、五、六、七、八、九、十、おわり』と数えられてしまい、二尾も損をしてしまう」と言うのだ。なぜかこの話が強烈な印象となって記憶に残っている。当時なにも分からない小学生にとって、アイヌとは数も数えられない未開で野蛮な原始人のように意識の中に刷り込まれてしまったのである。そんな出だしだったので失礼な言い方ではあるが、アイヌとはいったい何なのか分からぬままであった。 279 280澤田 健一', 281 'kaisetsu105w' => '今まで常識とされてきた縄文から続く日本の歴史は、本当に正しいのか? これまで考えられてきたアイヌ、縄文人、弥生人の関係を根底から覆す、現在の歴史観に一石を投じる渾身の書。', 282 'genrecodetrc' => 3, 283 'kankoukeitai' => 'BCD', 284 'obinaiyou' => '―賢者は歴史に学ぶ。 285縄文時代から連綿と続く日本の歴史。 286', 287 'hatsubai' => '星雲社', 288 'hatsubaiyomi' => 'セイウンシャ', 289 'author' => 290 array ( 291 0 => 292 array ( 293 'listseq' => 1, 294 'dokujikubun' => '著', 295 ), 296 ), 297 'datemodified' => '2019-10-02 10:28:05', 298 'datecreated' => '2019-09-10 15:49:33', 299 'hanmotoinfo' => 300 array ( 301 'name' => '柏艪舎', 302 'yomi' => 'ハクロシャ', 303 'url' => 'http://www.hakurosya.com', 304 'twitter' => 'https://twitter.com/hakurosya', 305 'facebook' => 'https://business.facebook.com/hakurosya/', 306 ), 307 ), 308 'summary' => 309 array ( 310 'isbn' => '9784434266195', 311 'title' => '縄文人の日本史 縄文人からアイヌへ', 312 'volume' => '', 313 'series' => '', 314 'publisher' => '柏艪舎', 315 'pubdate' => '20191002', 316 'cover' => 'https://cover.openbd.jp/9784434266195.jpg', 317 'author' => '澤田健一/著', 318 ), 319 ), 320)

文字数オーバーとなっていたので、jsonデータの一部を削除しました。

質問したいのは
・多次元配列のデータを取り出す方法があっているのか
$isbn_13 = $arr[0]['onix']['RecordReference'];
この部分はほかにもいろいろとデータを取り出す予定なのですが、階層が深くなると可読性に欠けるのではと思っています。
・連想配列にいれてアロー演算子では取得できないのか
連想配列に入れるような場合もこちらを参考に考えてみましたが、
アロー演算子では取得できませんでした。過去のteratailでの質問をみると
アロー演算子はオブジェクトを取得する際に使用するものとありましたが、
今回取得しているjsonデータとリンク先のjsonデータはどういう風に構造がちがうのでしょうか?
同一APIのデータではないので比較するべきものではないかもしれませんが、
jsonデータとオブジェクトについて教えてください。

長くなりましたが、
今回のようなAPIからデータを取得する際どのような書き方が適しているでしょうか?
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

API のような他者リソースの利用はローカルできちんと検証できるようになってから実施してください。現状では php の基礎知識が全く足りていないです。

必要な箇所のリンクを置いておきますが、リファレンス全体に目を通したほうが良いです。

json_decode
配列
クラスとオブジェクト

投稿2019/10/02 22:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

c_php

2019/10/03 00:55 編集

ご回答ありがとうございます。基礎知識が足りていないのはその通りだと思います。リファレンスをしっかり読んで、書いていきたいと思います。また、APIからの取得に関しても、1度取得したデータをファイルに保存し、検証はそちらからデータの取得するように変更したいと思います。 大変お手数ですが、今回のソースをご覧になってどういう部分で基礎知識が足りないとご判断されたのか、書き方がおかしい部分や足りない部分のご指摘をお願いできないでしょうか? 宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2019/10/03 01:00

> 今回のソースをご覧になってどういう部分で基礎知識が足りないとご判断されたのか json_decode($json,true) この true の意味、理解してないでしょ? 他にもリファレンスを読んでないことがわかる箇所が複数あります。 php の場合、公式サイトが読めるようになって初めて基礎が固まってきたと言えます。
c_php

2019/10/03 02:38 編集

第2引数にtrueをつけるとjsonデータを連想配列に入れることができると認識しています。これを書いた時もリファレンスと色々なPHPの学習サイトを読みながらつくってはいたのですが、理解できていないのだと思います。
c_php

2019/10/23 03:05

ご指摘の通り基本から再度勉強し作成したいと思います。ご回答いただきありがとうございました。またわからないことがあればお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問