- ベストアンサー
文字列の問題と関数作成方法
- 初心者が文字列の問題について質問しました。
- 関数を作成することで問題が解決しましたが、一部誤りがありました。
- 特定の形式の文字列を配列に変換する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
文字列関数とURLエンコードを利用して作成してみました。 自分の方では問題なく表示出来ましたが、どうでしょうか? <? $str1=array("(1)","(2)","(3)","(4)","(5)","(6)","(7)","(8)","(9)","(10)"); $str2="(1)(2)(3)う(4)え(5)お(6)か(7)(8)(9)(10)"; $str2_encode=urlencode($str2); $s=0; for ( $i = 0 ; $i <count ($str1) ; $i++) { //エンコード $str1_encode=urlencode($str1[$i ]); //検索してそれ以降の文字を取得 $str3 = strstr($str2_encode, $str1_encode); //$str1をぶん回して、削りまくる foreach($str1 as $v){ if($v!=$str1[$i ]){ $str4=strstr($str3, urlencode($v)); if($str4===false){ continue; }else{ $str3=str_replace($str4, "", $str3 ); } } } $str5=urldecode($str3); if( 2 < strlen($str5)){ $date[$s]=$str3; $s++; } } foreach($date as $k=>$v){ echo "\$date[".$k."]のエンコード文字は[".$v."]でデコード文字は[".urldecode($v)."]です<br />"; } ?> 出力結果は、 $date[0]のエンコード文字は[%87B%82%A4]でデコード文字は[(3)う]です $date[1]のエンコード文字は[%87C%82%A6]でデコード文字は[(4)え]です $date[2]のエンコード文字は[%87D%82%A8]でデコード文字は[(5)お]です $date[3]のエンコード文字は[%87E%82%A9]でデコード文字は[(6)か]です になればOKです。 ちなみに、 $str2="(3)う(1)(2)(5)お(7)(8)(4)え(9)(10)(6)か"; のように、順番がバラバラでも$str1に基づいて同じ結果になります。
その他の回答 (1)
- maenet1972
- ベストアンサー率68% (26/38)
No1ですが、記述ミスがありましたので、訂正させてください。 ここの部分を-------- $str5=urldecode($str3); if( 2 < strlen($str5)){ $date[$s]=$str3; $s++; } } -------------------- この様にしてください。 $str5=urldecode($str3); if( strlen($str1[$i]) < strlen($str5)){ $date[$s]=$str3; $s++; } } 比較文字が2文字以上の場合(例えば(1)とか<1>など)だと正しく動作しないので修正いたしました、、、^^;
お礼
ものすごいわかりやすい説明で大変助かりましたよ~~(嬉) うまくできました!! なるほどっって感じです。 まだまだ初心者なのでこれからもお世話になると思います。 ありがとうございました~~