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

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

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

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

Q&A

解決済

3回答

2047閲覧

phpの多次元配列の書き方と取得方法

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2018/08/02 09:01

phpで多次元配列を使いたいのですが、うまく取得することができません。

<?php $arry = [ [ 'タイトル', [ 'ジャンル01', 'ジャンル02', 'ジャンル03' ], 'テキスト' ], [ 'タイトル', [ 'ジャンル01', 'ジャンル02', 'ジャンル03' ], 'テキスト' ] ]; ?>

これで$arry[0][0][x]で出力しようとしても何も返ってきません。
そもそも配列の書き方が間違っているのでしょうか?

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

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

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

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

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

guest

回答3

0

ベストアンサー

目的のキーが違います。

var_dump を使い調べましょう。

php

1<?php 2$arry = [ 3 [ 4 'タイトル', 5 [ 'ジャンル01', 'ジャンル02', 'ジャンル03' ], 6 'テキスト' 7 ], 8 [ 9 'タイトル', 10 [ 'ジャンル01', 'ジャンル02', 'ジャンル03' ], 11 'テキスト' 12 ] 13]; 14var_dump($arry); 15 16
array(2) { [0]=> array(3) { [0]=> string(12) "タイトル" [1]=> array(3) { [0]=> string(14) "ジャンル01" [1]=> string(14) "ジャンル02" [2]=> string(14) "ジャンル03" } [2]=> string(12) "テキスト" } [1]=> array(3) { [0]=> string(12) "タイトル" [1]=> array(3) { [0]=> string(14) "ジャンル01" [1]=> string(14) "ジャンル02" [2]=> string(14) "ジャンル03" } [2]=> string(12) "テキスト" } }

投稿2018/08/02 09:04

namda

総合スコア705

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

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

退会済みユーザー

退会済みユーザー

2018/08/03 05:43

無事取得できました。ありがとうございました。
guest

0

現状だとechoかprintを使って出力しようとしているのでしょうか?そして、エラーレポートでnoticeが出ないようになっていませんか?現状の配列だと配列や文字列が入れ子になっているため、処理しようとしても

notice Array to string conversion

のような忠告が出るはずです。要は、配列を格納しようとして呼び出した変数に、文字列を入れようとしているからです。

具体的に言えば、$arry[0][0]だとタイトルという値を返しますが、$arry[0][0][x]は三次元目の配列のインデックス値がない(配列でないため)ために値を返せません。

これを処理する場合、階層が決まりきっているならば、

PHP

1foreach($arry as $ary){ 2 foreach($ary as $ar){ 3 if(is_array($ar) ){ 4 foreach($ar as $a){ 5 $tmp = $a; 6 } 7 }else{ 8 $tmp = $a; 9 } 10 } 11} 12 echo $tmp;

これで最低限の処理はできます。ただ、今回を見た限り、タイトル、ジャンル、テキストと要素がグループ化されているので、

PHP

1$arry = [ 2 [ 3 "title" => "タイトル1", 4 "genre" =>["ジャンル01", "ジャンル02", "ジャンル03"], 5 "text" => "テキスト2" 6 ], 7 [ 8 "title" => "タイトル2", 9 "genre" =>["ジャンル01", "ジャンル02", "ジャンル03"], 10 "text" => "テキスト2" 11 ], 12 ];

このように連想配列として定義してから処理した方がベターだと思います。

投稿2018/08/03 02:45

FKM

総合スコア3624

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

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

退会済みユーザー

退会済みユーザー

2018/08/03 05:45

取得しようとしている箇所に値がなかったのですね。連想配列でも試してみます。ありがとうございました。
guest

0

php

1<?php 2 3ini_set('display_errors', true); 4error_reporting(E_ALL); 5 6$arry = [ 7 [ 8 'タイトル', 9 ['ジャンル01', 'ジャンル02', 'ジャンル03'], 10 'テキスト' 11 ], 12 [ 13 'タイトル', 14 ['ジャンル01', 'ジャンル02', 'ジャンル03'], 15 'テキスト' 16 ] 17]; 18 19var_dump($arry[0][0]); 20var_dump($arry[0][1][0]); 21var_dump($arry[0][1][1]); 22var_dump($arry[0][1][2]); 23var_dump($arry[0][2]); 24 25var_dump($arry[1][0]); 26var_dump($arry[1][1][0]); 27var_dump($arry[1][1][1]); 28var_dump($arry[1][1][2]); 29var_dump($arry[1][2]); 30

投稿2018/08/02 09:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

namda

2018/08/02 09:10

この方法だとこの場合phpは文字列を配列と扱いエラーは出ない場合があるので注意が必要です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問