- ベストアンサー
explodeで・・・
データベースから取得した文字列を、explodeを使って配列化したいのですが、文字列に含まれる区切り文字が2種類あり、一度で思うような形にできません。 取得する文字列が 「○○=>●●__○○=>●●__○○=>●●__○○=>●●__○○=>●●」 なのですが、ここから「=>」「__」を取り除いて 「○○ ●● ○○ ●● ○○ ●● ○○ ●● ○○ ●●」(9要素) という形にしたいのです。 一応以下のようなソースを書いてみましたが、出力結果が「○○=>●●」となっており、二回目のexplodeが働いていないようです。 $option = $row['options']; $option2 = explode("__","{$option}"); for($opno = 0; $opno < count($option2); $opno++){ explode("=>","{$option2[$opno]}"); } 同じ処理を何度も実行する上、取得する文字列の長さがそのたびに異なるので、繰り返し処理で済ませたいのですが・・・。 どうすれば思うような結果にできるのでしょうか。ご教授よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 結局○○=>●●の○○と●●をセットで、後でnoとansとして使うんですよね? それなら、>=は置きかえずにそのままexplodeして、下記のようにinputタグを生成するときに分解してみればいかがでしょうか。 $option = $row['options']; $option2 = explode("__","{$option}"); $write = ""; foreach($option2 as $option3){ list($no,$ans) = explode("=>",$option3); $write .= "<input type=\"radio\" name=\"answer\" value=\"{$no}\">"; $write .= "<b>{$no}</b>.{$ans}<br>"; } echo "{$write}";
その他の回答 (2)
- ham_kamo
- ベストアンサー率55% (659/1197)
$option = $row['options']; $option2 = str_replace("=>", "__", $option); $option3 = explode("__","{$option2}"); とすればいかがでしょうか。
お礼
回答ありがとうございました。 何とか配列化に関してはクリアできたのですが、今度は別の問題に直面しました・・・。 配列から値を取り出してinputタグに代入するのですが、 $write = ""; foreach($option3 as $option4){ list($no,$ans) = $option3; $write .= "<input type=\"radio\" name=\"answer\" value=\"{$no}\">"; $write .= "<b>{$no}</b>.{$ans}<br>"; echo "{$write}"; } これで実行すると配列の0と1($no→0、$ans→1)しか取り出せません・・・;次に続けて$no→2、$ans→3と取り出すにはどうしたら良いのでしょうか?
- suzuki-_-
- ベストアンサー率77% (152/195)
難しく考えず、素直に区切りを統一してから配列にするようにしてはいかがでしょうか str_replace → explode のような順序で
お礼
回答ありがとうございました。 str_replace・・・言われてみればありましたね、そんなのが^^;
お礼
たびたびありがとうございます。 おかげさまで無事解決いたしました! ここから先に進めず悶々としていたのでとても助かりました。ありがとうございました!