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

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

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

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

HTML

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

Q&A

解決済

2回答

1710閲覧

explodeの使い方を教えてください

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

HTML

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

0グッド

0クリップ

投稿2020/10/17 09:00

前提・実現したいこと

1<>名前<>コメント<>時間の形で書かれているテキストファイルをfileで読み取り、foreachで配列にしたあと
explodeで分割してそれぞれの値にしたいです
間違いがあれば教えてください

発生している問題・エラーメッセージ

explodeを入れると
array
array
array
となります
explodeをコメントアウトすると正常です

エラーメッセージ
エラーではなさそうです

該当のソースコード

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>mission_3-2</title> </head> <body>
<form action="" method="post"> <input type="text" name="namae" value="名前"> <input type="text" name="comment" value="コメント"> <input type="submit" name="sousin">
</form> <?php $filename="mission_3-2.txt"; $namae= ($_POST["namae"]); $comment = ($_POST["comment"]); $date = date("Y年m月d日 H:i:s"); if (file_exists($filename)) { $num = count(file($filename))+1; } else { $num = 1; } $format = $num."<>".$namae."<>".$comment."<>".$date; if (!empty($namae)||!empty($comment)){ $fp = fopen($filename,'a'); fwrite($fp, $format."\n"); fclose($fp); } $filename="mission_3-2.txt"; $lines = file($filename,FILE_IGNORE_NEW_LINES); foreach($lines as $line){ $lin = explode("<>", $line); print $lin."</br>"; } ?> </body> </html> php

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

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

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

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

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

takasima20

2020/10/17 11:24

なんとなく、やりたいのは explode() ではなく str_replace() のような気がするなあ。
退会済みユーザー

退会済みユーザー

2020/10/20 04:34

一応今回はexplodeを使う課題なんですよね そちらもきになるのでしらべてみます!
guest

回答2

0

ベストアンサー

「使い方」ならPHPマニュアルを確認するのが最も確実です。

explode()

explode — 文字列を文字列により分割する
explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] ) : array
**文字列の配列を返します。**この配列の各要素は、 string を文字列 delimiter で区切った部分文字列となります。

返却値がarray
つまり「配列」なので、そのままprintではなくループ処理を使って取り出します。

処理結果受け取った変数がどういう内容になっているのかを確認する癖もつけましょう。
var_dump()


蛇足:
テキストファイルにデータを保存し取り扱うやり方は面倒で組みにくいだけでほとんど実務で使われることがありません。もっときちんとロジックで悩んだ方が良いので、早い段階でデータベースに切り替えてください。

投稿2020/10/17 09:18

編集2020/10/17 09:31
m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2020/10/17 11:25

回答ありがとうございます foreachというのもループを繰り返すためのものですよね? 1度explodeに引き渡したためにまたループ処理が外れたということでしょうか…? 知識不足で申し訳ないです 蛇足について アドバイスありがとうございます 今はプログラミングの初心者向けインターン中なのでこの形式でやっていますが、インターンが終わって知識をある程度蓄えたらすぐにデータベースに移行したいと思います!!
m.ts10806

2020/10/17 21:56 編集

>1度explodeに引き渡したためにまたループ処理が外れたということでしょうか…? いいえ。 ループしている$linesの1要素$lineをさらに配列にしたので、配列にした結果、またループする必要があるということです。 ただ、やりたいことは何でしょうか? 「どのような情報をどのような形で表示したいか」で決める必要があります。 データは num."<>".$namae."<>".$comment."<>".$date で保存されているわけですし、そこからどのように表示したいのか? ここは仕様なので、作る人が決める必要があります。 それ次第で、配列にする必要があるのか、配列にした後どう扱うか、変わってきます。場合によりループではなく個別で取り出すようにもなります。
m.ts10806

2020/10/17 21:57

>インターンが終わって知識をある程度蓄えたら インターンでこの形を教えているなら微妙ですね。 その会社の業務でテキストへの保存を使ってるわけではないでしょうし。 教材があまり良くなさそう。
退会済みユーザー

退会済みユーザー

2020/10/20 04:39

遅れてしまい申し訳ないです arrayの場合はそれに合わせた書き方があるんですね、ありがとうございます! インターンではあるんですけど少し特殊な形態でして、就職支援が強いので多少教材が微妙でも目をつむって頑張ります
m.ts10806

2020/10/20 04:45

「このやり方覚えても就職しても使う機会がない」です。
退会済みユーザー

退会済みユーザー

2020/10/20 05:35

一応IT系の会社何社かが合同で開催しているインターンなんですけどまさかそこまで実用性ないとは… データベースのことを調べると明らかにこちらのほうが便利ですね セキュリティもしっかりしていますし 基本的な書き方は似たようなところも多そうなので一応しっかりやりたいと思います
m.ts10806

2020/10/20 05:56

書き方は全然違いますよ。 あとあくまでPHPからすると外部の仕組みなので「SQL」という専用のコマンドを利用してデータを操作することになります。
退会済みユーザー

退会済みユーザー

2020/10/20 07:45

PHPとテキストファイル、PHPとデータベース PHP自体は一緒なので使われるコマンド?(echoとかJavaでいうところのSystem.out.println)みたいなのは大体同じだろうと思ったのですがまさかここから全然違ったり…?
m.ts10806

2020/10/20 07:49

何を懸念しているのかよくわかりません
退会済みユーザー

退会済みユーザー

2020/10/20 08:23

SQLを使用することで構成がガラッと変わるくらいなら甘んじて受け入れますが、使う語彙までがまるっきり変わったりしたら大変そうだなあと思っただけです
m.ts10806

2020/10/20 08:48

語彙 んー。 Java知ってるならほぼ同等の書き方にはなりますけど、そういうことではなく? まあプログラムは日進月歩の世界なので、今あるソースを捨てて作り直しなんて日常茶飯事ですよ。書いたとおりにしか動かないので「惜しい」とかはありません。
guest

0

変数$linは配列になるので添字をつけましょう。
(誤)

PHP

1print $lin."</br>";

(正)

PHP

1print $lin[0]."-".$lin[1]."-".$lin[2]."-".$lin[3]."<br/>";

投稿2020/10/17 12:52

jk233

総合スコア55

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

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

m.ts10806

2020/10/17 22:10

それだけならimplodeで簡略的に書けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問