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

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

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

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

PHP

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

Q&A

解決済

2回答

1148閲覧

json形式urlをphpで取得後、配列整形して表示させたい

leo-maru

総合スコア23

JSON

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

PHP

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

0グッド

1クリップ

投稿2019/06/26 09:58

json形式の配列URLをphp側で取得したものを整形出力したいと思い、
以下のように記述してますが、思った形で出力が出来ない状態です。

ソースコード

testData.json

json

1{ 2 "item": [ 3 { 4 "title": "タイトル1", 5 "date": "2019-06-01", 6 "status": "1", 7 "image": "https://testdomein/imageURL01", 8 "link": "https://testdomein/linkURL01", 9 "text": "説明テキスト" 10 }, 11 { 12 "title": "タイトル2", 13 "date": "2019-06-02", 14 "status": "0", 15 "image": "https://testdomein/imageURL02", 16 "link": "https://testdomein/linkURL02", 17 "text": "説明テキスト" 18 }, 19 { 20 "title": "タイトル3", 21 "date": "2019-06-03", 22 "status": "1", 23 "image": "https://testdomein/imageURL03", 24 "link": "https://testdomein/linkURL03", 25 "text": "説明テキスト" 26 }, 27 { 28     ・ 29     ・ 30     ・ 31 } 32 ] 33}

取得側のPHP部分は、以下のように書いてあり、

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="utf-8"> 5<title></title> 6</head> 7<body> 8<ul> 9<?php 10$url = "testData.json"; 11$json = file_get_contents($url); 12$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); 13$arr = json_decode($json,true); 14 15foreach ($arr['item'] as $list) { 16 print "<li class='itemL'><div class='box'>"; 17 foreach ($list as $key => $val) { 18 print "<div class='$key'>$val</div>"; 19 } 20 print "</div></li>"; 21 } 22?> 23</ul> 24</body> 25</html>

下記のような出力結果になる部分を

html

1<li class="itemL"> 2 <div class="box"> 3 <div class="title">タイトル</div> 4 <div class="date">YYYY-MM-DD</div> 5 <div class="status">1</div> 6 <div class="image">https://testdomein/imageURL</div> 7 <div class="link">https://testdomein/linkURL</div> 8 <div class="text">説明テキスト</div> 9 </div> 10</li>

以下のような構造に整形して出力したいのですが、どう記述すればよいのか分からずの状態です。
どなたかご教授頂けないでしょうか。

html

1<li class="itemL"> 2 <div class="box"> 3 <a href="https://testdomein/linkURL" class="link"> 4 <div class="image"><img src="https://testdomein/imageURL" alt=""></div> 5 <div class="title">タイトル</div> 6 <div class="date">YYYY-MM-DD</div> 7 <div class="status">1</div> 8 <div class="text">説明テキスト</div> 9 </a> 10 </div> 11</li>

よろしくお願い致します。

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

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

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

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

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

papinianus

2019/06/26 10:05 編集

内側のforeachを使わない方法しか思いつかないのですが、二重のforeachは必須ですか?
leo-maru

2019/06/26 10:08

ご確認ありがとうございます。出力結果が希望の配列になりさえすれば、内側のforeachは必須ではないです。
guest

回答2

0

ベストアンサー

jsonデータを生でhtmlに埋め込んでセキュリティ的に問題ない前提

PHP

1$arr = json_decode($json,true); 2foreach ($arr['item'] as $list) { 3 print "<li class='itemL'>\n<div class='box'>\n"; 4print <<<eof 5 <a href="{$list["link"]}" class="link"> 6 <div class="image"><img src="{$list["image"]}" alt=""></div> 7 <div class="title">{$list["title"]}</div> 8 <div class="date">{$list["date"]}</div> 9 <div class="status">{$list["status"]}</div> 10 <div class="text">{$list["text"]}</div> 11 </a> 12 13eof; 14 print "</div>\n</li>\n"; 15}

投稿2019/06/26 10:10

yambejp

総合スコア114843

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

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

leo-maru

2019/06/26 12:41

ご提示の修正で希望通りの構造になりました。的確なアドバイスありがとうございました。
guest

0

php

1 2foreach ($arr['item'] as $list) { 3 print "<li class='itemL'><div class='box'>"; 4 print "<a href='".$arr['link']." class='link'>"; 5 print "<div class='image'><img src='{$arr['image']}' alt=''></div>"; 6//以下同じ。スマホからは辛かったのでマイナスされてもいいや 7 print "</div></li>"; 8}

投稿2019/06/26 10:15

papinianus

総合スコア12705

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

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

leo-maru

2019/06/26 12:40

早々に修正のご提示ありがとうございます。ただ、こちらで再現した所、各項目が上手く拾えずでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問