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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

配列

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

Q&A

1回答

639閲覧

PHP配列を出力したい

cacao86

総合スコア97

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

配列

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

0グッド

0クリップ

投稿2020/03/31 07:16

編集2022/01/12 10:55

配列をツリー上で出力したいのですが上手くいきません。
以前いただきました自己結合とこちらを参考に実行しましたら下記のように表示されました。

sample.phpの結果

1Array 2( 3 [0] => Array 4 ( 5 [id] => 1418 6 [0] => 1419 7 [name] => アメリカ 8 [1] => アラスカ 9 [subject] => トランプ.1 10 [2] => マイク 11 [body] => Thanks 12 [3] => Thanks 13 [parent_id] => 14 [4] => 1418 15 [post_user] => 16 [5] => 17 [created_at] => 2020-03-17 13:42:24 18 [6] => 2020-03-17 13:42:24 19 [updated_at] => 2020-03-26 10:28:31 20 [7] => 2020-03-18 14:28:50 21 [deleted_at] => 2020-03-26 10:28:31 22 [8] => 23 [9] => 1418 24 [10] => アメリカ 25 [11] => トランプ.1 26 [12] => Thanks 27 [13] => 28 [14] => 29 [15] => 2020-03-17 13:42:24 30 [16] => 2020-03-26 10:28:31 31 [17] => 2020-03-26 10:28:31 32 ) 33 34 [1] => Array 35 ( 36 [id] => 1418 37 [0] => 1420 38 [name] => アメリカ 39 [1] => アリゾナ 40 [subject] => トランプ.1 41 [2] => ダグ 42 [body] => Thanks 43 [3] => Thanks 44 [parent_id] => 45 [4] => 1418 46 [post_user] => 47 [5] => 48 [created_at] => 2020-03-17 13:42:24 49 [6] => 2020-03-17 13:42:24 50 [updated_at] => 2020-03-26 10:28:31 51 [7] => 2020-03-18 14:28:50 52 [deleted_at] => 2020-03-26 10:28:31 53 [8] => 54 [9] => 1418 55 [10] => アメリカ 56 [11] => トランプ.1 57 [12] => Thanks 58 [13] => 59 [14] => 60 [15] => 2020-03-17 13:42:24 61 [16] => 2020-03-26 10:28:31 62 [17] => 2020-03-26 10:28:31 63 ) 64 65 (中略) 66 67 [8] => Array 68 ( 69 [id] => 1424 70 [0] => 1428 71 [name] => 中国 72 [1] => 河北 73 [subject] => 習近平... 74 [2] => 許勤 75 [body] => シェイシェイ 76 [3] => シェイシェイ 77 [parent_id] => 78 [4] => 1424 79 [post_user] => 80 [5] => 81 [created_at] => 2020-03-17 13:42:24 82 [6] => 2020-03-17 13:42:24 83 [updated_at] => 2020-03-26 10:28:54 84 [7] => 2020-03-18 14:28:50 85 [deleted_at] => 2020-03-26 10:28:54 86 [8] => 87 [9] => 1424 88 [10] => 中国 89 [11] => 習近平... 90 [12] => シェイシェイ 91 [13] => 92 [14] => 93 [15] => 2020-03-17 13:42:24 94 [16] => 2020-03-26 10:28:54 95 [17] => 2020-03-26 10:28:54 96 ) 97 98 [9] => Array 99 ( 100 [id] => 1424 101 [0] => 1429 102 [name] => 中国 103 [1] => 天津 104 [subject] => 習近平... 105 [2] => 張国清 106 [body] => シェイシェイ 107 [3] => シェイシェイ 108 [parent_id] => 109 [4] => 1424 110 [post_user] => 111 [5] => 112 [created_at] => 2020-03-17 13:42:24 113 [6] => 2020-03-17 13:42:24 114 [updated_at] => 2020-03-26 10:28:54 115 [7] => 2020-03-18 14:28:50 116 [deleted_at] => 2020-03-26 10:28:54 117 [8] => 118 [9] => 1424 119 [10] => 中国 120 [11] => 習近平... 121 [12] => シェイシェイ 122 [13] => 123 [14] => 124 [15] => 2020-03-17 13:42:24 125 [16] => 2020-03-26 10:28:54 126 [17] => 2020-03-26 10:28:54 127 )

[(親レコード1)id name subject body post_user updated_at]
└[(子レコード5)id name subject body post_user updated_at]
└[(子レコード4)id name subject body post_user updated_at]
└[(子レコード3)id name subject body post_user updated_at]
└[(子レコード2)id name subject body post_user updated_at]
└[(子レコード1)id name subject body post_user updated_at]

上記のようなツリーを出力するにはどうHTML、phpを書いたらよろしいのでしょうか?

<li></li>または<table><tr></tr></table>を使って表示してみたいと思っています。 ↓アメリカと中国が親です ![イメージ説明](df8337bc0dedd1cc8f6c94f7c5f7c723.png) 下記が現在のsample.phpコードです。コメントアウトを外した場合構文エラーとなってしまいます。

php

1$stmt=$db->prepare("select * from t_bbs as t1 left join t_bbs as t2 on t1.parent_id = t2.id where t2.deleted_at is not null order by t2.id desc;"); 2$stmt->execute(); 3$row = $stmt->fetchAll(); 4// foreach($rows as $row){ 5 6// } 7// 再帰で関数を呼び出します。 8// RecursionArray($row, 0, $rows, 0); 9 10// 実行結果表示 11echo('<pre>'); 12print_r($row); 13echo('</pre>'); 14 15// 再帰処理用の関数です。 16// function RecursionArray($row, $ParentId, &$rows, $hierarchy) { 17// 18// foreach($row as $v) { 19// if ($v['ParentId'] == $ParentId) { 20// $rows[] = row_repeat('-', $hierarchy).$v['name']; 21// RecursionArray($row, $v['Id'], $rows, $hierarchy+1); 22// } 23// } 24 25// } 26// while ($rows = $stmt->fetchAll()) { 27// $rows[] = $row; 28// var_dump($rows); 29// }

下記index.phpでは親だけの出力はできています。汚いですが、

php

1<?php 2require('dbconnect.php'); 3 4$subject = $_POST['subject']; 5$body = $_POST['body']; 6$post_user = $_POST['post_user']; 7 ?> 8 9<?php 10// create.phpから送信されてきた場合 11if (isset($_POST["subject"], $_POST["post_user"])) { 12 //件名が空のとき 13 if ($_POST["subject"] == '') { 14 $isSubject = false; 15 }else { 16 $isSubject = true; 17 } 18 //投稿ユーザーが空のとき 19 if ($_POST["post_user"] == '') { 20 $isPost_user = false; 21 } else { 22 $isPost_user = true; 23 } 24} 25 // データベースに追加する 26 if (isset($isSubject, $isPost_user)) { 27 if ($isSubject && $isPost_user) { 28 try { 29 // トランザクション開始 30 // $pdo->beginTransaction(); 31 $sql = "insert into t_bbs (subject, post_user) VALUES (:subject, :post_user)"; 32// $sql = "insert into t_bbs (subject, body, post_user) values (:subject, :body, :post_user)"; 33 $stmt = $db->prepare($sql); 34 $stmt->bindValue(":subject", $_POST["subject"], PDO::PARAM_STR); 35 // $stmt->bindValue(":body", $_POST["body"], PDO::PARAM_STR); 36 $stmt->bindValue(":post_user", $_POST["post_user"], PDO::PARAM_STR); 37 $stmt->execute(); 38 // $pdo->commit(); 39 }catch (PDOException $e){ 40 print('Error:'.$e->getMessage()); 41 die(); 42 } 43 } 44 } 45//ここまでcreate.phpの処理 46 47// $params = array(':subject => $subject', ':body => $body', ':post_user => $post_user'); 48// $stmt->execute($params); 49 50$sql = "select * from t_bbs where parent_id is null and deleted_at is null order by id desc"; 51 $stmt = $db->prepare($sql); 52 $stmt->execute(); 53 while($row = $stmt->fetch()){ 54 $rows[] = $row; 55 } 56 /* 57 foreach ($statement as $row) { 58 $rows[] = $row; 59 } 60 */ 61 //データベース接続切断 62 $db = null; 63 64 ?> 65 <!DOCTYPE html> 66 <html> 67 <head> 68 <title>一覧表示</title> 69 <meta charset="utf-8"> 70 </head> 71 <body> 72 <h1>一覧表示</h1> 73 74 <table border='1'> 75 <tr> 76 <td><input type="checkbox"></td><td>ID</td><td>件名</td><td>投稿ユーザー</td><td>投稿日時</td> 77 </tr> 78 <?php 79 foreach($rows as $row){ 80 ?> 81 <tr> 82 <td> 83 <form action="delete.php" method="GET" onSubmit="return check()" id="delete"> 84 <input form="delete" type="checkbox" name="id[]" value="<?php print($row['id']); ?>"> 85 </form> 86 </td> 87 <td><?php print($row['id']); ?> 88 </td> 89 <td> 90 <form action="edit.php" method="POST"> 91 <a href="edit.php?id=<?php echo $row['id'];?>"> 92 <?php echo $row['subject']; ?> 93 </a> 94 </form> 95 </td> 96 <td><?php echo $row['post_user']; ?></td> 97 <td><?php echo $row['created_at']; ?></td> 98 </tr> 99 <?php 100} 101?> 102 </table> 103 <input form="delete" type="submit" value="削除する"> 104 105 <script type="text/javascript"> 106 function check(){ 107 if(window.confirm('本当に削除しますか?')){ 108 return true; 109 var elements = document.getElementsByName('id[]') ; 110 for(var i = 0 ; i < elements.length ; i ++){ 111 if(elements[i].checked == true){ 112 // alert(elements[i].value); 113 location.href = "delete.php"; 114 } 115 } 116 } 117 else{ 118 window.alert('キャンセルされました'); 119 return false; 120 } 121 } 122 </script> 123 <p> 124 <a href="create.php">新規投稿へ</a> 125 </p> 126 </body> 127 <!-- <form action="delete.php" method="GET" onSubmit="return check()"> 128 <input type="checkbox" name="id[]" value="<?php echo $row['id']; ?>"> 129 <?php echo $row['id']; ?> 130 <input type="submit" value="削除する"> 131 </form> --> 132 </html> 133

追記

イメージ説明
上に子供をツリー上に入れてみたいです。

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

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

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

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

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

guest

回答1

0

teratail内でも結構出てると思います。
[ツリー tag:PHP] の検索結果: 64件

参考まで。

投稿2020/03/31 07:27

m.ts10806

総合スコア80765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問