- ベストアンサー
文字列の文字一文字ずつを解析して結果を表示したいのですが・・・
たとえば $data="あ5Aいう7えお" という文字列があったとして 一文字ずつの決まった長さの合計を表示しようとおもっています。 $KAZU=mb_strlen($data,"SJIS"); for($i=0;$i!=$KAZU;$i++){ $moji=mb_substr($data,$i,$i,"SJIS"); $moji_size=mb_strwidth($moji,"SJIS"); if($moji_size==2){ $px+=12; }else{ if(mbereg("/[A-Z]./",$moji)){ $px+=10; }elseif(mbereg("/[0-9]./",$moji)){ $px+=9; }elseif(mbereg("/[a-z]./",$moji)){ $px+=8; }else{ $px+=6; } } if($px>370){ $px=0; break; } } print "$px"; $data="あ5Aいう7えお"の場合結果は(12+9+8+12+12+9+12+12=)86になってほしい この方法でやってもうまくいきませんでした。なんだか面倒なことしているような気もしますが、もっと簡単な方法など知っている方などいらっしゃいましたら、どなたか教えていただければ幸いです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
なんとなくプログラマーの野生の勘で、 > $moji=mb_substr($data,$i,$i,"SJIS"); $moji=mb_substr($data,$i,1,"SJIS"); > mbereg("/[A-Z]./",$moji) mb_ereg( "[A-Z]", $moji ) ※数字・英小文字も同様。 とかじゃないかなーと思わないでもなかったり。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
なんか数があわないとおもったらAは8じゃなくて10ですよね?? こんな感じでやるとよいのでは? <? $data="あ5Aいう7えお"; $px=strlen($data)*6;//1バイト文字は6、2バイト文字は12をたす if(preg_match_all("/[A-Z]/",$data,$matches)) $px+=count($matches[0])*4;//A~Zはさらに4をたす(つまり10をたす) if(preg_match_all("/[0-9]/",$data,$matches)) $px+=count($matches[0])*3;//0~9はさらに3をたす(つまり9をたす) if(preg_match_all("/[a-z]/",$data,$matches)) $px+=count($matches[0])*2;//a~zはさらに2をたす(つまり8をたす) print $px; ?>
お礼
間違いに指摘されて今気づきました。大変申し訳ありませんでした。 こっちのほうが処理が簡単そうですね。使ってみたいと思います。 ご回答ありがとうございました。
お礼
自分がmb_substr関数の使い方を間違って覚えていたみたいです… うまく動くようになりました。ありがとうございました。