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

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

ただいまの
回答率

87.38%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 932

score 19

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

該当のソースコード

<?php
    $url = "https://api.openbd.jp/v1/get?isbn=";

    $isbn = "978-4-434-26619-5";
    $isbn_int = str_replace("-", "", $isbn);

    $result = $url.$isbn_int;

    $json = file_get_contents($result);

    #文字コードを文字化けしないようにする。
    $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');

    $arr = json_decode($json,true);

    $isbn_13 = $arr[0]['onix']['RecordReference'];


var_dump($isbn_13);
var_export($arr);
?>


表示結果

string(13) "9784434266195"
array (
  0 => 
  array (
    'onix' => 
    array (
      'RecordReference' => '9784434266195',
      'NotificationType' => '03',
      'ProductIdentifier' => 
      array (
        'ProductIDType' => '15',
        'IDValue' => '9784434266195',
      ),
      'DescriptiveDetail' => 
      array (
        'ProductComposition' => '00',
        'ProductForm' => 'BA',
        'ProductFormDetail' => 'B119',
        'TitleDetail' => 
        array (
          'TitleType' => '01',
          'TitleElement' => 
          array (
            'TitleElementLevel' => '01',
            'TitleText' => 
            array (
              'collationkey' => 'ジョウモンジンノニホンシ',
              'content' => '縄文人の日本史',
            ),
            'Subtitle' => 
            array (
              'collationkey' => 'ジョウモンジンカラアイヌヘ',
              'content' => '縄文人からアイヌへ',
            ),
          ),
        ),
        'Contributor' => 
        array (
          0 => 
          array (
            'SequenceNumber' => '1',
            'ContributorRole' => 
            array (
              0 => 'A01',
            ),
            'PersonName' => 
            array (
              'collationkey' => 'サワダ ケンイチ',
              'content' => '澤田 健一',
            ),
            'BiographicalNote' => '昭和39年(1964)札幌市生まれ。同志社大学工学部卒業。
既存の枠にとらわれず、歴史・考古学を独自に学ぶ。思いつくまま読み・調べ・歩き・聞き・見ることを旨とし、文献やデータを忠実に読み解き歴史の事実に迫ることを目指している。',
          ),
        ),
        'Language' => 
        array (
          0 => 
          array (
            'LanguageRole' => '01',
            'LanguageCode' => 'jpn',
            'CountryCode' => 'JP',
          ),
        ),
        'Extent' => 
        array (
          0 => 
          array (
            'ExtentType' => '11',
            'ExtentValue' => '206',
            'ExtentUnit' => '03',
          ),
        ),
        'Subject' => 
        array (
          0 => 
          array (
            'SubjectSchemeIdentifier' => '78',
            'SubjectCode' => '0095',
          ),
          1 => 
          array (
            'SubjectSchemeIdentifier' => '79',
            'SubjectCode' => '14',
          ),
          2 => 
          array (
            'SubjectSchemeIdentifier' => '20',
            'SubjectHeadingText' => '縄文;おもしろい;アイヌ;歴史;弥生;北海道',
          ),
        ),
      ),
      'CollateralDetail' => 
      array (
        'TextContent' => 
        array (
          0 => 
          array (
            'TextType' => '02',
            'ContentAudience' => '00',
            'Text' => '今まで常識とされてきた日本の歴史は正しいのか?これまで考えられてきたアイヌ、縄文人、弥生人の関係を根底から覆す渾身の書。',
          ),
          1 => 
          array (
            'TextType' => '02',
            'ContentAudience' => '04',
            'Text' => '今まで常識とされてきた縄文から続く日本の歴史は、本当に正しいのか? これまで考えられてきたアイヌ、縄文人、弥生人の関係を根底から覆す、現在の歴史観に一石を投じる渾身の書。',
          ),
          2 => 
          array (
            'TextType' => '03',
            'ContentAudience' => '00',
            'Text' => 'これが本当の縄文時代だ!
今まで常識とされてきた縄文から続く日本の歴史は、本当に正しいのか?

縄文時代から連綿と続く日本の歴史。
一般に語られる事実に含まれる不可解な謎は、アイヌの視点を通すことにより解き明かされる!これまで考えてこられたアイヌ、縄文人、弥生人の関係を根底から覆す、現在の歴史観に一石を投じる渾身の書。

(中略)しかし、それは完全なる誤りである。',
          ),
          3 => 
          array (
            'TextType' => '04',
            'ContentAudience' => '00',
            'Text' => '目次
はじめに アイヌとは
序章一 インディアンの祖先は日本人?
序章二 小さい田んぼ、太い田んぼ
一   縄文以前(旧石器時代)
二   DNAから見る縄文日本人
三   縄文時代のはじまり
四   縄文人のくらし
五   イノシシ祭り
六   クマ祭り、イオマンテ
七   縄文語、アイヌ語
八   縄文語地名と大和朝廷が名付けた地名
九   北海道の縄文遺跡
十   大川遺跡(余市町)
十一  海民
十二  共通する神話
十三  夷(えみし・えびす)
十四  素戔嗚尊

参考資料',
          ),
        ),
        'SupportingResource' => 
        array (
          0 => 
          array (
            'ResourceContentType' => '01',
            'ContentAudience' => '01',
            'ResourceMode' => '03',
            'ResourceVersion' => 
            array (
              0 => 
              array (
                'ResourceForm' => '02',
                'ResourceVersionFeature' => 
                array (
                  0 => 
                  array (
                    'ResourceVersionFeatureType' => '01',
                    'FeatureValue' => 'D502',
                  ),
                  1 => 
                  array (
                    'ResourceVersionFeatureType' => '04',
                    'FeatureValue' => '9784434266195.jpg',
                  ),
                ),
                'ResourceLink' => 'https://cover.openbd.jp/9784434266195.jpg',
              ),
            ),
          ),
        ),
      ),
      'PublishingDetail' => 
      array (
        'Imprint' => 
        array (
          'ImprintIdentifier' => 
          array (
            0 => 
            array (
              'ImprintIDType' => '24',
              'IDValue' => '4032',
            ),
            1 => 
            array (
              'ImprintIDType' => '19',
              'IDValue' => '434',
            ),
          ),
          'ImprintName' => '柏艪舎',
        ),
        'Publisher' => 
        array (
          'PublishingRole' => '01',
          'PublisherIdentifier' => 
          array (
            0 => 
            array (
              'PublisherIDType' => '24',
              'IDValue' => '4032',
            ),
            1 => 
            array (
              'PublisherIDType' => '19',
              'IDValue' => '434',
            ),
          ),
          'PublisherName' => '星雲社',
        ),
        'PublishingDate' => 
        array (
          0 => 
          array (
            'PublishingDateRole' => '01',
            'Date' => '20191002',
          ),
          1 => 
          array (
            'PublishingDateRole' => '25',
            'Date' => '20190922',
          ),
        ),
      ),
      'ProductSupply' => 
      array (
        'MarketPublishingDetail' => 
        array (
          'PublisherRepresentative' => 
          array (
            0 => 
            array (
              'AgentRole' => '08',
              'AgentIdentifier' => 
              array (
                0 => 
                array (
                  'AgentIDType' => '01',
                  'IDTypeName' => '取引コード',
                  'IDValue' => '4032',
                ),
              ),
              'AgentName' => '星雲社',
            ),
          ),
          'MarketPublishingStatus' => '00',
          'MarketPublishingStatusNote' => '1;1',
        ),
        'SupplyDetail' => 
        array (
          'ReturnsConditions' => 
          array (
            'ReturnsCodeType' => '04',
            'ReturnsCode' => '03',
          ),
          'ProductAvailability' => '99',
          'Price' => 
          array (
            0 => 
            array (
              'PriceType' => '03',
              'PriceAmount' => '1300',
              'CurrencyCode' => 'JPY',
            ),
          ),
        ),
      ),
    ),
    'hanmoto' => 
    array (
      'toji' => '並製',
      'zaiko' => 11,
      'maegakinado' => 'はじめに アイヌとは

アイヌとはじめて出合ったのは小学校の授業であった。先生の話では「アイヌは数を数えられないので鮭十尾を和人に渡すとき、和人に『はじめ、一、二、三、四、五、六、七、八、九、十、おわり』と数えられてしまい、二尾も損をしてしまう」と言うのだ。なぜかこの話が強烈な印象となって記憶に残っている。当時なにも分からない小学生にとって、アイヌとは数も数えられない未開で野蛮な原始人のように意識の中に刷り込まれてしまったのである。そんな出だしだったので失礼な言い方ではあるが、アイヌとはいったい何なのか分からぬままであった。

澤田 健一',
      'kaisetsu105w' => '今まで常識とされてきた縄文から続く日本の歴史は、本当に正しいのか? これまで考えられてきたアイヌ、縄文人、弥生人の関係を根底から覆す、現在の歴史観に一石を投じる渾身の書。',
      'genrecodetrc' => 3,
      'kankoukeitai' => 'BCD',
      'obinaiyou' => '―賢者は歴史に学ぶ。
縄文時代から連綿と続く日本の歴史。
',
      'hatsubai' => '星雲社',
      'hatsubaiyomi' => 'セイウンシャ',
      'author' => 
      array (
        0 => 
        array (
          'listseq' => 1,
          'dokujikubun' => '著',
        ),
      ),
      'datemodified' => '2019-10-02 10:28:05',
      'datecreated' => '2019-09-10 15:49:33',
      'hanmotoinfo' => 
      array (
        'name' => '柏艪舎',
        'yomi' => 'ハクロシャ',
        'url' => 'http://www.hakurosya.com',
        'twitter' => 'https://twitter.com/hakurosya',
        'facebook' => 'https://business.facebook.com/hakurosya/',
      ),
    ),
    'summary' => 
    array (
      'isbn' => '9784434266195',
      'title' => '縄文人の日本史 縄文人からアイヌへ',
      'volume' => '',
      'series' => '',
      'publisher' => '柏艪舎',
      'pubdate' => '20191002',
      'cover' => 'https://cover.openbd.jp/9784434266195.jpg',
      'author' => '澤田健一/著',
    ),
  ),
)


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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/03 09:17 編集

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

    キャンセル

  • 2019/10/03 10:00

    > 今回のソースをご覧になってどういう部分で基礎知識が足りないとご判断されたのか

    json_decode($json,true)

    この true の意味、理解してないでしょ?
    他にもリファレンスを読んでないことがわかる箇所が複数あります。
    php の場合、公式サイトが読めるようになって初めて基礎が固まってきたと言えます。

    キャンセル

  • 2019/10/03 10:16 編集

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

    キャンセル

  • 2019/10/23 12:05

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

    キャンセル

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

  • ただいまの回答率 87.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る