• ベストアンサー

php foreach文

以下の構文で、postされてきたデータが複数ある時、ファイルと置き換えれるデータが複数あっても初めの1つだけになってしまいます。 複数のデータを”ファイル”戸を着かえる方法を教えてください。 foreach($_POST['title'] as $key=>$title) { $files=str_replace("ファイル",$_POST['title'][$key].'</br>',$files); }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

あと、元々の原因は1番さんが書いてる通り titleを配列にして受け取ったか?なので、元のHTMLから 確認ですね。 title=50 title=60 これは、60という1つの値ですが。 title[]=50 title[]=60 この場合は、2つ要素を持ったarrayになり、 参照名は自動なので連番が降られ50と60が取り込まれます。 ここら辺は、デバッガーを使って値を確認すれば、 間違いは出ないでしょう。 今回の件は、元々の送信部のHTMLもあれば、 解決早かったかもしれません。回答者も同じソースで 実行できるので、1発で問題がわかりますからね~。 しっかし、GW暇だ~ 緊急事態ってことで店も開けられないので、 ゴロゴロしてるので、私も久々にプログラムでもしてみたいが。

dhtfyjh
質問者

お礼

なるほど。 $POST自体が配列だったのですね。 ブラウザ側(フォーム)にも配列ということを明記 しておきます。 本当にありがとうございます。 余談ですが、質問文の誤字がひどいですね。 以下、質問文。 以下の構文で、postされてきたデータが複数ある時、ファイルと置き換えれるデータが複数あっても初めの1つだけになってしまいます。 複数のデータを”ファイル”と置き換きかえる方法を教えてください。

その他の回答 (3)

回答No.3

それより、$_POSTを書き換えるのはよくないので。 // 質問者さんのコード作用がわからないので、暫定ロアスネークチェインで記載(first & last separater space) function get_title_lists() { $out = []; foreach( $_POST[ 'title' ] as $target ) {  // fromとtoは用意しておきます。 $out[] = str_replace( $from , $to , $target ); } return( $out ); } のような、取り込みのみを担当する関数を吐き出したほうが 良いと思いますよ。 サイズが大きくなってきた場合にデバッグが大変になるので。 以後わけわからなくなったら、この関数ごとに、 デバッグをすれば確実に思った通りの結果になるという 流れが作れます。 大本を書き換えると、それがマスターなのかコピーなのか わからなくなるので、面倒が増えます。 恐らくもうすぐ、その壁に質問者さん到達すると思ってます。 多段エスケープが必要になってくると思っています。 そうなると、元々の整理がかなり重要になるでしょうね。 あと、あなたの投稿結構楽しみにしますよ!

回答No.2

foreach($_POST['title'] as &$hoge) { // $hogeに対して通常の書き換えを行ってください。 } これは、参照渡しの手法です。 https://www.php.net/manual/ja/language.references.pass.php

  • t_ohta
  • ベストアンサー率38% (5241/13712)
回答No.1

$_POST['title'][$key] で受け取るためには、HTMLは <input type="text" name="title[]"> <input type="text" name="title[]"> <input type="text" name="title[]"> といった具合で作られていなければいけませんが、PHPで意図したとおりにデータを受け取れていますか。

関連するQ&A