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

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

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

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

3回答

10345閲覧

多次元配列のデータのセット方法と取得方法について

dthani

総合スコア131

PHP

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

1クリップ

投稿2015/06/16 03:04

編集2015/06/16 05:09

下記の通り、コーディングしたのですが、
foreachで多次元配列のデータの取得が上手くできません。

値のセットと値の取り出しに問題があれば、その方法を教えてください。
※簡単なサンプルがあればお願いします。
もしくは、参考となるサイトがあれば教えてください。

lang

1コード 2//初期化 3 $records = array(); 4 5 $records['a'] = array(); 6 $records['b'] = array(); 7 $records['c'] = array(); 8 $records['d'] = array(); 9//値セット 10 for($i = 0; $i < $cnt; $i++){ 11 array_push($records['a'] , ''); 12 array_push($records['b'] , ''); 13 array_push($records['c'] , ''); 14 array_push($records['d'] , ''); 15 } 16 17//値取り出し ※ここが上手く行かない 18foreach ($records as $record){ 19 20 //下記の値が取れない 21 var_dump($record['c']); 22 23var_dump($record[0]['c']); 24}

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

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

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

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

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

guest

回答3

0

2次元配列ですね。1次元の添付文字はa~dの文字列で、二次元の添付文字は、0から始まる
数値で良いのですよね。

でしたら、配列を明示できな記述をした方がわかりやすいかと思います。
また、var_dump関数で配列を表示しないのは、値セットのforのところの
$cntを設定していないからではないでしょうか?
もし、設定しなければforループの配列の値を設定しないまま抜けて
しまいますが、記述は間違いないですか?

このようにしたらいかがですか?
コード
//初期化
$records = array();

$records['a'] = array(); $records['b'] = array(); $records['c'] = array(); $records['d'] = array();

$cnt=??? //どこからリミット値を得ているのでしょうか?
//設定をしておかないとループできませんよ。
//値セット
for($i = 0; $i < $cnt; $i++){
$records['a'] [$i]= '';
$records['b'] [$i]= '';
$records['c'] [$i]= '';
$records['d'] [$i]= '';
}

//値取り出し
var_dump($records);

または、

foreach ($records as $key) {

for($i = 0; $i < $cnt; $i++){
echo "$records[$key][$i]=".$records[$key][$i]."<br>";
}
}

配列を

投稿2015/06/16 05:45

KazutoshiOhashi

総合スコア125

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

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

dthani

2015/06/16 06:33

ご回答ありがとうございます。 $cntは、テーブルで25行固定で設定しております。 申し訳ありません。
dthani

2015/06/16 06:35

SaintKnowledgeさんの方が回答が早かったため、 SaintKnowledgeさんの方をベストアンサーにします。 ありがとうございました。
guest

0

質問のコードに
foreach ($records as $record)
と書いてありますので、
$record$recordsの各要素、
つまり
$records['a'],$records['b'],$records['c'],$records['d']
に相当します。

となるとforeachの中身である、var_dump($record['c']);は、
$records['a']['c'],...,$records['d']['c']
となり、明らかにやりたいこととは違うと思います。

投稿2015/06/16 03:25

ozwk

総合スコア13512

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

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

dthani

2015/06/16 03:42

お手数ですが、 適切な書き方を教えてください。
guest

0

ベストアンサー

多次元配列は多次元ループさせないと明示的に値が取れない、と思った方がいいかもです。
(もちろん例外あり)

以下で値が取れませんかね?動作保障しませんので念のため。

lang

1foreach ($records as $key => $record){ 2 foreach ($record[$key] as $val) { 3 echo $key." ".$val."<br>"; 4 } 5}

投稿2015/06/16 04:49

SaintKnowledge

総合スコア368

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

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

dthani

2015/06/16 05:02

すみません。上手く取得できませんでした。 質問文に書いた初期化の仕方と値のセット方法に問題ないでしょうか?
SaintKnowledge

2015/06/16 05:18

エラーが出ちゃいましたね^^;。以下でどうでしょうか?気になるのは、$cntには何がセットされているのかな?というところ。以下の例では、1をセットしています。 $cnt = 1; $records = array(); $records['a'] = array(); $records['b'] = array(); $records['c'] = array(); $records['d'] = array(); //値セット for($i = 0; $i < $cnt; $i++){ array_push($records['a'] , '1'); array_push($records['b'] , '2'); array_push($records['c'] , '3'); array_push($records['d'] , '4'); } foreach ($records as $key => $record){ foreach ($record as $val) { echo $key." ".$val."<br>"; } }
dthani

2015/06/16 05:29

ご回答ありがとうございます。 取得できました。ありがとうございます。 $data[$i]['a']みたいにキーを指定して取得はできないでしょうか? ※$iはループカウンタ $cntは25です。
SaintKnowledge

2015/06/16 05:37

foreachの前でも最後でもいいので、 echo $records['c'][0]; で表示されると思います。
SaintKnowledge

2015/06/16 05:42

余談ですが、好みもありますが、私ならfor分のところはこう書きます。 for($i = 0; $i < $cnt; $i++){ $records['a'][$i] = '1'; $records['b'][$i] = '2'; $records['c'][$i] = '3'; $records['d'][$i] = '4'; } echo $records['c'][0]; >3、と表示 echo $records['a'][0]; >1、と表示
dthani

2015/06/16 06:34

上手く取得できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問