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

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

新規登録して質問してみよう
ただいま回答率
85.50%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

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

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

Q&A

解決済

2回答

302閲覧

【php】多次元配列に含まれる値をもとに、タブを生成したい

kotaosu

総合スコア15

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

PHP

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

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

0グッド

0クリップ

投稿2018/02/26 07:47

編集2018/02/26 09:26

タイトルのとおりなのですが、
多次元配列内に含まれるキー"ID"の値ごとにタブを作成したいと思っています。
しかしコード上での書き方がわからず、お手上げになってしまい、質問させていただきます。

PHP

1<?php 2$ID_list = array( 3 "aiueo" , 4 "sasisuseso" , 5 "kakikukeko" 6); 7 8$DATA_list = 9array( 10 array( 11 array( 12 "日付" => "2017/01/01", 13 "時間" =>"00:00:00", 14 "名前"=> "tarou", 15 "ID"=> "aiueo" 16 ), 17 array( 18 "日付" => "2017/01/02", 19 "時間" =>"00:00:10", 20 "名前"=> "tarou", 21 "ID"=> "aiueo" 22 ) 23 ), 24 array( 25 array( 26 "日付" => "2017/01/03", 27 "時間" =>"00:00:00", 28 "名前"=> "yamada", 29 "ID"=> "kakikukeko" 30 ), 31 array( 32 "日付" => "2017/01/03", 33 "時間" =>"00:00:10", 34 "名前"=> "yamada", 35 "ID"=> "kakikukeko" 36 ) 37 ), 38 array( 39 array( 40 "日付" => "2017/01/04", 41 "時間" =>"00:00:00", 42 "名前"=> "poppy", 43 "ID"=> "sasisuseso" 44 ) 45 ) 46); 47?>

以下のURLでは正規表現を利用していましたが、今回はそれが利用できないため
手間取っています。
https://teratail.com/questions/113442

PHP

1if (count($ID_list) > 0 && count($DATA_list) > 0) { 2 $tab = '<p id="tabcontrol">' . PHP_EOL; 3 $tab_contents = '<div id="tabbody">' . PHP_EOL; 4 $count = 1; 5 foreach ($ID_list as $val) { 6 $tab .= '<a href="#tabpage' . $count . '">' . htmlspecialchars($val) . '</a>' . PHP_EOL; 7 $tab_contents .= '<div id="tabpage' . $count . '">' . PHP_EOL; 8 9 $check = false; 10*/恐らくここを改変すればいける気がする---------------------------------- 11 foreach ($DATA_list as $row) { 12 if (preg_grep("/{$val}/", $row)) { 13 $tab_contents .= implode("<br />", $row) . PHP_EOL; 14 } 15 } 16--------------------------------------------------------------------/* 17 $tab_contents .= '</div>' . PHP_EOL; 18 $count ++; 19 } 20 $tab .= '</p>' . PHP_EOL; 21 $tab_contents .= '</div>' . PHP_EOL; 22} 23echo $tab; 24echo $tab_contents;

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

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

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

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

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

guest

回答2

0

array(
'ID' => "aiueo" , 'ID' => "sasisuseso" , 'ID' => "kakikukeko" )

おなじキー名で要素を指定するとどんどん上書きされますよ

PHP

1$a=array( 2 'ID' => "aiueo" , 3 'ID' => "sasisuseso" , 4 'ID' => "kakikukeko" 5 ); 6print_r($a);

追記

データ管理方法を変えてもいいのでしょうか?
であればこうするとデータアクセスがそうとう楽になるとおもいます

PHP

1$ID_list = [ 2 "aiueo", 3 "sasisuseso", 4 "kakikukeko", 5]; 6 7$DATA_list = [ 8 "aiueo"=>[ 9 [ 10 "日付" => "2017/01/01", 11 "時間" =>"00:00:00", 12 "名前"=> "tarou", 13 "ID"=> "aiueo", 14 ], 15 [ 16 "日付" => "2017/01/02", 17 "時間" =>"00:00:10", 18 "名前"=> "tarou", 19 "ID"=> "aiueo", 20 ], 21 ], 22 "kakikukeko"=>[ 23 [ 24 "日付" => "2017/01/03", 25 "時間" =>"00:00:00", 26 "名前"=> "yamada", 27 "ID"=> "kakikukeko", 28 ], 29 [ 30 "日付" => "2017/01/03", 31 "時間" =>"00:00:10", 32 "名前"=> "yamada", 33 "ID"=> "kakikukeko", 34 ], 35 ], 36 "sasisuseso"=>[ 37 [ 38 "日付" => "2017/01/04", 39 "時間" =>"00:00:00", 40 "名前"=> "poppy", 41 "ID"=> "sasisuseso", 42 ], 43 ], 44];

投稿2018/02/26 08:00

編集2018/02/26 08:50
yambejp

総合スコア114572

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

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

kotaosu

2018/02/26 08:26

すみません。自分の質問の仕方が悪く、噛み合ってないのかもしれません。 例えると、ID_listのaiueo  kakikukeko  sasisusesoをタブとして作成し、 aiueo をクリックしたとき、 $DATA_listの"ID"=> "aiueo"を持っている配列のみを呼び出したいということです。
kotaosu

2018/02/26 08:56

私が記述したコードの配列から、回答の追記のような形にコードで変更できるでしょうか。
yambejp

2018/02/26 09:00

>私が記述したコードの配列から 最初に回答しましたが、質問者さんが記述したコードでは$ID_listにデータは1つしか存在できません
kotaosu

2018/02/26 09:08

あ、ようやく理解できました。キーが一緒だと上書きされてしまうので、だめということですよね。 今$ID_listを出力したところ以下のようになりました。そのため、もしかしたらキーは設定されてないかもしれないです。 array(3) { [0]=> string(5) "aiueo" [3]=> string(10) "sasisuseso" [6]=> string(10) "kakikukeko" }
yambejp

2018/02/26 09:15

そのデータでしたら私が追記したデータと合致するので問題ないと思います。 $DATA_listについては、すでにIDごとにグルーピングされているようですが 実体としてIDごとかどうか担保されていません。 もしIDごととにまとめられているという保証があるのであれば 最初のデータのIDを拾えば$ID_listとのヒモ付は可能です
kotaosu

2018/02/26 09:32

IDごとにまとめられていると思います。ですので恐らく紐付けはできると考えています。 質問の2つめのコードにある「恐らくここを改変すればいける気がする」の欄を書き換えれば 可能だと思うのですが、コード上でどのように修正したらよろしいでしょうか。
guest

0

ベストアンサー

yambejpさんの回答の流れで回答します。

*/恐らくここを改変すればいける気がする---------------------------------- foreach ($DATA_list as $row) { if (preg_grep("/{$val}/", $row)) { $tab_contents .= implode("<br />", $row) . PHP_EOL; } } --------------------------------------------------------------------/*

の部分を$DATA_listから$valに一致するキーを拾ってくるだけなので、

if (array_key_exists($key, $DATA_list)) { $tab_contents .= implode("<br />", $DATA_list[$key]) . PHP_EOL; }

で良いです。

参考:
array_key_exists
連想配列

投稿2018/03/07 02:30

nullbot

総合スコア910

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

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

kotaosu

2018/03/07 07:59

今$keyは未定義の状態なのですが、ループさせてキーの値を入れていく感じでしょうか。
nullbot

2018/03/07 08:13

$valですね。失礼しました。
kotaosu

2018/03/13 05:15

やっと理解できました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問