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

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

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

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

Q&A

解決済

2回答

887閲覧

一部の連想配列の値がnullで返される

tkmmobile

総合スコア12

PHP

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

0グッド

0クリップ

投稿2019/06/01 08:43

前提・実現したいこと

PHP(NetBeans)で問題文を作成するコードを書いています。

質問文、選択肢、正答のリストは、csvで作成したものを読み込ませて、
連想配列にして、1問ずつ取り出して表示するようにしたいと思っています。

発生している問題・エラーメッセージ

連想配列から、質問文を別に用意した変数に代入しようとしたところ、
中身が無いと返されてしまいました。他の値(選択肢、正答などは)想定通りに読み込み出来ています。

該当のソースコード

PHP

1//csvファイルサンプル(sample.csv) 2query, item1, item2, item3, correct 3testtest1,1,2,3,2 4testtest2,1,2,3,1 5 6 7 8//以下該当コード 9 10$_SESSION['count'] = 0; 11 12// ファイルオープン 13if (($file = fopen($fileName,"r")) === FALSE){ 14 err(); 15}; 16 17$quizList = array(); // クイズリスト変数の初期化 18$keys = null; // 項目変数の初期化 19 20//csvファイルを連想配列に読み込ませる 21while (($data = fgetcsv($file,0,",")) !==FALSE) { 22 if ($keys === null){ // 1行目を項目として記憶 23 $keys = $data; 24 } 25 else{ 26 $quizList[] = array_combine($keys, $data); // 連想配列として記録 27 } 28} 29 30$question = $quizList[$_SESSION['count']][query]; //質問文を取り出す 31$ans_num = $quizList[$_SESSION['count']][correct]; //正解番号を取り出して格納 32 33//デバッグ用のエラー処理 34if ($quizList[$_SESSION['count']][query] === null ){ 35 err(); 36} 37

試したこと

複数のphpファイルで読み込みをかけたいので、$_SESSION['count']使っているのですが、
検証の為、固定値で0を入れても結果は同じでした。

$quizList[0][query] === null

またNetBeansのデバッグ中に値を見ると、quizList[0][query]の値は確かにtesttest1になっていました。
$question = $quizList[$_SESSION['count']][query];の部分を$question = (string)$quizList[$_SESSION['count']][query];と書いても、結果は変わりませんでした。

また$questionを先に適当な値("test")に入れた後に、連想配列の値を入れると、nullになってしまいます。

補足情報(FW/ツールのバージョンなど)

NetBeans 8.2
csv (UTF-8)

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

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

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

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

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

guest

回答2

0

自己解決

csvファイルを以下のように修正したら、上手く行きました。

//csvファイルサンプル(sample.csv)
query,file,item1,item2,item3,correct
1,testtest1,1,2,3,2
2,testtest2,1,2,3,1

因みにご指摘頂いたqueryは、以下で読み込ませているので、問題ないのかと思っていました。
query以外のものは通常通りに読み込みできるので。。。
$quizList[] = array_combine($keys, $data); // 連想配列として記録

因みに以下で作成しても変わりませんでした。
$question = $quizList[$_SESSION['count']]['query']

根本解決ではないですが、一先ずこれで良いです。

投稿2019/06/01 14:52

tkmmobile

総合スコア12

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

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

0

queryのように冒頭に$もクォーテーションもなければ定数として扱われます。
当該定数を定義している場所は提示コードにはなさそうですしそもそも定数未定義のエラーでてるのでは。

投稿2019/06/01 09:16

m.ts10806

総合スコア80765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問