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

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

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

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

Q&A

解決済

1回答

568閲覧

使う側で直観的に項目がわかる配列の組み方

tomoyuki500219

総合スコア21

PHP

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

0グッド

0クリップ

投稿2021/02/23 00:52

編集2021/02/23 01:19
コード ```SQLの実行結果を配列に格納しています ```PHP 現在コーディングしている配列 while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { $MachineToolData[$Cnt]=array($result['id'],$result['pkno'],$result['tno'],$result['gno'],$result['name']); $Cnt++; } 配列を使う側 echo $MachineToolData[$Cnt][0]; echo $MachineToolData[$Cnt][1]; echo $MachineToolData[$Cnt][2]; echo $MachineToolData[$Cnt][3];

使う側を下記のような項目で直観的にわかるようにしたいのですが、コーディング方法が思いつきません。
ご教示願えないでしょうか?

どう使えば良いか…?
echo $MachineToolData['id'];
echo $MachineToolData['pkno'];
echo $MachineToolData['gno'];
echo $MachineToolData['name'];

どう配列を作ればよいか…?
while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) {
$MachineToolData=array(array('id'=>$result['id'],'pkno'=>$result['pkno'],'tno'=>$result['tno'],'gno'=>$result['gno'],'name'=>$result['name']));
$Cnt++; }

追記 詳細なコード追記します

PHP

1配列作成側(SQL実行側) 2 public function GetMachineToolData(string $MysqlToolDataTableName): array{ 3 4 $MachineToolData; 5 6 try{ 7 $pdo = new PDO(self::DSN,self::USER,self::PASSWORD); 8 }catch(PDOException $e){ 9 echo "MySQL接続エラー: " .$e->getMessage(); 10 } 11 12 $stmt = $pdo->query('select '.$MysqlToolDataTableName . '.id,pkno,tno,gno,tool_name.name,nom,tool_suf.suf_name,sufatr, 13 lengthA,diameter,lifetime,usetime,lifenumber,usenumber,tool_itf.itf,taprfeed,taptype,thrust,horsepower 14 from '.$MysqlToolDataTableName .',tool_name,tool_suf,tool_itf 15 where ' .$MysqlToolDataTableName .'.name=tool_name.t_id 16 and ' .$MysqlToolDataTableName .'.suf=tool_suf.suf_id 17 and '.$MysqlToolDataTableName . '.itf=tool_itf.itf_id 18 order by id desc'); 19 20 $Cnt=0; 21 while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { 22 23 $MachineToolData[$Cnt]=array( $result['id'],$result['pkno'],$result['tno'],$result['gno'],$result['name'],$result['nom'],$result['suf_name'], 24 $result['sufatr'],$result['lengthA'],$result['diameter'],$result['lifetime'],$result['usetime'], 25 $result['lifenumber'],$result['usenumber'],$result['itf'],$result['taprfeed'],$result['taptype'], 26 $result['thrust'],$result['horsepower']); 27 $Cnt++; 28 } 29 30 return $MachineToolData; 31 32 } 33 34呼び出し側 35$MachineToolData=$objDB->GetMachineToolData(MYSQL_TOOLDATA_TABLE_NAME); 36 37function SetTableData($MachineToolData){ 38 39 $Cnt=0; 40 41 while (empty($MachineToolData[$Cnt][2]) <> True) { 42 43 echo "<tr>"; 44 echo "<td>"; 45 echo $MachineToolData[$Cnt][0]; 46 echo "</td>"; 47 echo "<td>"; 48 echo $MachineToolData[$Cnt][1]; 49 echo "</td>"; 50 echo "<td>"; 51 echo $MachineToolData[$Cnt][2]; 52 echo "</td>"; 53 echo "<td>"; 54 echo $MachineToolData[$Cnt][3]; 55 echo "</td>"; 56 echo "<td>"; 57 echo $MachineToolData[$Cnt][4]; 58 echo "</td>"; 59 echo "<td>"; 60 echo $MachineToolData[$Cnt][5]; 61 echo "</td>"; 62 echo "<td>"; 63 echo $MachineToolData[$Cnt][6]; 64 echo "</td>"; 65 echo "<td>"; 66 if($MachineToolData[$Cnt][7]==0){ 67 echo "" . ' '; 68 }else{ 69 echo "重量" . ' '; 70 } 71 echo "</td>"; 72 echo "<td>"; 73 if($this->mathine_name=="VORTEX"or"FJV250"or"HCN"or"HCN5000"or"HCN68001_1"or"HCN68001_2"){ 74 echo $MachineToolData[$Cnt][8]/10000 . ' '; 75 }else{ 76 echo $MachineToolData[$Cnt][8]/1000 . ' '; 77 } 78 echo "</td>"; 79 echo "<td>"; 80 if($this->mathine_name=="VORTEX"or"FJV250"or"HCN"or"HCN5000"or"HCN68001_1"or"HCN68001_2"){ 81 echo $MachineToolData[$Cnt][9]/10000 . ' '; 82 }else{ 83 echo $MachineToolData[$Cnt][8]/1000 . ' '; 84 } 85 echo "</td>"; 86 echo "<td>"; 87 echo round($MachineToolData[$Cnt][9]/60) . ' '; 88 echo "</td>"; 89 echo "<td>"; 90 echo round($MachineToolData[$Cnt][10]/60) . ' '; 91 echo "</td>"; 92 echo "<td>"; 93 echo $MachineToolData[$Cnt][11] . ' '; 94 echo "</td>"; 95 echo "<td>"; 96 echo $MachineToolData[$Cnt][12] . ' '; 97 echo "</td>"; 98 echo "<td>"; 99 echo $MachineToolData[$Cnt][13] . ' '; 100 echo "</td>"; 101 echo "<td>"; 102 echo $MachineToolData[$Cnt][14] . ' '; 103 echo "</td>"; 104 echo "<td>"; 105 if($MachineToolData[$Cnt][15]==0){ 106 echo "" . ' '; 107 }else{ 108 echo "同期" . ' '; 109 } 110 echo "</td>"; 111 echo "<td>"; 112 echo $MachineToolData[$Cnt][16] . ' '; 113 echo "</td>"; 114 echo "<td>"; 115 echo $MachineToolData[$Cnt][17] . ' '; 116 echo "</td>"; 117 echo "</tr>"; 118 119 $Cnt++; 120 121 } 122 echo "</TABLE>"; 123 echo "</body>"; 124 echo "</html>"; 125 126 } 127 128}

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

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

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

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

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

guest

回答1

0

ベストアンサー

fetchAllしてforeach

投稿2021/02/23 00:56

m.ts10806

総合スコア80850

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

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

m.ts10806

2021/02/23 00:57

FETCH_ASSOCで取った時点でSQLのSELECT句に指定した名称で添え字とれるので直感的であるとは思うのだけど。全取りしたいならwhileじゃないほうが良いという意見はある。
m.ts10806

2021/02/23 01:00

というか、質問再度よく読んでみると、結局どうしたいのか分からない。
tomoyuki500219

2021/02/23 01:07

毎度、ご回答いただきありがとうございます。 説明が下手で申し訳ございません。SQLの実行結果を配列に格納して返す関数にしていて、呼び出し側でその配列(SQLの実行結果)を使っています。
m.ts10806

2021/02/23 01:11

文章説明より、実際のコードを。 「どこでどう使うものなのか」明記を。
m.ts10806

2021/02/23 01:24

なんかグチャっとしてますが、結局どうしたいのかわかりませんね。 whileが無駄なのでfetchAllにしたら短く済みますよ、ループ何回も要りませんよ、くらいは言えるけど。
m.ts10806

2021/02/23 01:32 編集

$MachineToolData[$Cnt] = $result; でいいんじゃないですかね。 $MachineToolData[$n][key名] でアクセスできる。 でもわざわざカウント用の変数作ったり配列作り直すのが無駄なのでfetchAllした結果をそのまま関数から返せばいいという提案をしています。
m.ts10806

2021/02/23 01:33

カウント用の変数も0始まり連番なら不要。 $MachineToolData = []; //中略 while ($result = $stmt->fetch(PDO::FETCH_ASSOC)) { $MachineToolData[] = $result; }
m.ts10806

2021/02/23 01:33

これが1行で済むという回答です。 return $stmt->fetchAll(PDO::FETCH_ASSOC);
tomoyuki500219

2021/02/23 02:05 編集

$result = $stmt->fetchAll(PDO::FETCH_ASSOC); return $result; として $result[$Cnt][key名]; でできました。 簡潔でとてもわかりやすいと感じています。 データベース処理(PDO)の理解不足のような気がしました。
tomoyuki500219

2021/02/23 02:06

return $stmt->fetchAll(PDO::FETCH_ASSOC);に修正しました
m.ts10806

2021/02/23 02:23

いえ、ドキュメントの軽視です。
tomoyuki500219

2021/02/23 02:26

ドキュメントを読む努力してみます。
m.ts10806

2021/02/23 02:35

はい。PHPマニュアルです。 今回回答にもリンク提示しています。 PHPに限らずドキュメント活用できるかどうかはその後の成長に大きく関わってきます。 teratail見てると、ドキュメント活用できてない人はずっと初心者ですね。回答者は多くの回答でドキュメントへのリンクを根拠とします。 最も正しいことが書いてあるからです。個人記事のように解釈ではなく事実が書いてあるからです。
tomoyuki500219

2021/02/23 02:38

PHPマニュアル、むつかしいイメージもあるのですが、読みこなせるようになりたいと思います。脱初心者したいです…。
m.ts10806

2021/02/23 02:43

確認する項目はそんなにないですよ。 -何を引数として必要としているか -どんな結果が返ってくるか -注意事項 覚える必要はなく、関連機能もあわせて確認する癖がつけて、あとは簡単なコード組んでみて確認して使い方を考える作業です。
m.ts10806

2021/02/23 03:01

あとは「クラスの基礎」「セッション」などチュートリアル要素があるものは一通り通すこと。 結局はたくさん書いてたくさん考えるしかないです。 誰が書いても同じコードは同じ結果を返す。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問