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

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

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

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

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

4412閲覧

PHP・データベース連携で連想配列に連想配列を追加する方法

arito91

総合スコア11

JSON

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

PHP

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2017/06/12 17:33

連想配列に対してjson_encode関数を使用し、以下のようなjson形式の内容を出力したいと考えています。
データベースと連携して、見つかったデータの数だけ$arrayの連想配列"III"の中に連想配列を追加していきたいです。

json

1{ 2 "AAA":"$BBB", 3 "BBB":"$GGG", 4 "CCC":"$HHH", 5 "DDD":"$EEE", 6 "III": 7 [{ 8 "JJJ":KKK, 9 "LLL":"MMM, 10 "NNN":"OOO", 11 "PPP":"QQQ", 12 "RRR":"SSS", 13 "TTT":"UUU", 14 "VVV":"WWW" 15 }, 16 { 17 "JJJ":XXX, 18 "LLL":"YYY, 19 "NNN":"ZZZ", 20 "PPP":"@@@", 21 "RRR":"***", 22 "TTT":"???", 23 "VVV":"!!!" 24 }], 25 { 26 "JJJ":くくく, 27 "LLL":"けけけ, 28 "NNN":"こここ", 29 "PPP":"さささ", 30 "RRR":"ししし", 31 "TTT":"すすす", 32 "VVV":"せせせ" 33 }] 34}

ただ、連想配列の中に連想配列をある分だけどんどん追加する場合どのように書けばいいのか調べてもピンとこない状態です。
どなたかご教授いただけないでしょうか。

私が試したのは以下のような内容です。
(参考にしたURLはhttps://teratail.com/questions/32086です。)

//■元の連想配列

PHP

1$array = array( 2 "AAA" => "$FFF", 3 "BBB" => "$GGG", 4 "CCC" => "$HHH", 5 "DDD" => "$EEE", 6 "III" => array() 7 ); 8 9//■ループごとに追加されていく内容 10$p_array = array 11 ("III" => array( 12 "JJJ" => $KKK, 13 "LLL" => "$MMM", 14 "NNN" => "$OOO", 15 "PPP" => "$QQQ", 16 "RRR" => "$SSS", 17 "TTT" => "$UUU", 18 "VVV" => "$WWW" 19 ) 20); 21 22//■追加 23$array = array_merge($array["III"],$p_array["III"]); 24//結果はnull……。 25//(どころか、1度目のループの時点で"AAA"~"DDD"が完全に消えてしまいました……。)

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

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

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

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

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

guest

回答2

0

ベストアンサー

ご提示のJSONを実現するのであればこんな感じ。

PHP

1$array = array( 2 "AAA" => "$FFF", 3 "BBB" => "$GGG", 4 "CCC" => "$HHH", 5 "DDD" => "$EEE", 6 "III" => array() 7 ); 8 9//省略:DBから取得の処理 10 11//取得結果をループ 12while(~~~~){ 13 //省略:$KKKとか$MMMとかで受け取る処理 14 15 $row = array( 16 "JJJ" => $KKK, 17 "LLL" => $MMM, 18 "NNN" => $OOO, 19 "PPP" => $QQQ, 20 "RRR" => $SSS, 21 "TTT" => $UUU, 22 "VVV" => $WWW 23 ); 24 $array["III"][] = $row; 25} 26

どのようなタイミングや仕様で今回のJSONおよび配列を作るかにも夜のですが、
もし、DBから取得したカラム名をそのまま配列のキーとして使うようであればfetchで連想配列としてDB情報を取得して$rowの配列を作らずそのまま突っ込む方が行数が少なく済むので良いですね。

PHP

1//取得結果をループ Mysqlの場合 2while($rowdata = mysqli_fetch_assoc($res)){ 3 $array["III"][] = $rowdata; 4}

プチ解説

配列の[]に入れていくことで配列の0番目から順番に値を入れていくことができます。
その結果をJSONにすることで下記のような結果となります。
[
//内容
],
[
//内容
],
・・・
var_dumpすると
[0]=>array(内容の個数){内容},
[1]=>array(内容の個数){内容},
・・・
みたいな感じですね。

そういえば、JSON提示されていますがちょこちょこ"の閉じがなかったりしますので調整・記法を統一しておいてください。

投稿2017/06/13 00:26

編集2017/06/13 00:28
m.ts10806

総合スコア80765

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

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

arito91

2017/06/13 15:04

ありがとうございます。 []の解釈もご教授いただけて大変助かりました。 また、jsonに関してのご指摘ありがとうございます。 不慣れなので、この点気を付けていきます。
guest

0

仕様が明確でないので微妙ですが、配列の追加は以下のように行います。

php

1<?php 2$array = array( 3 "AAA" => "FFF", 4 "BBB" => "GGG", 5 "CCC" => "HHH", 6 "DDD" => "EEE", 7 "III" => array() 8 ); 9 10$p_array = array 11 ("III" => array( 12 "JJJ" => "KKK", 13 "LLL" => "MMM", 14 "NNN" => "OOO", 15 "PPP" => "QQQ", 16 "RRR" => "SSS", 17 "TTT" => "UUU", 18 "VVV" => "WWW" 19 ) 20); 21 22$q_array = array 23 ("III" => array( 24 "JJJ" => "KKK", 25 "LLL" => "MMM", 26 "NNN" => "OOO", 27 "PPP" => "QQQ", 28 "RRR" => "SSS", 29 "TTT" => "UUU", 30 "VVV" => "WWW" 31 ) 32); 33 34$array['III'][] = $p_array['III']; 35$array['III'][] = $q_array['III']; 36

DB のデータとの組み合わせは、都度突っ込むか、foreach で実装すればイケると思います。

投稿2017/06/12 21:21

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

arito91

2017/06/13 15:05

ありがとうございます。大変助かりました。 記法は結構シンプルなのですね。 勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問