dポイントプレゼントキャンペーン実施中!

たとえば
$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になってほしい

この方法でやってもうまくいきませんでした。なんだか面倒なことしているような気もしますが、もっと簡単な方法など知っている方などいらっしゃいましたら、どなたか教えていただければ幸いです。
よろしくお願いします。

A 回答 (2件)

なんとなくプログラマーの野生の勘で、



> $moji=mb_substr($data,$i,$i,"SJIS");

$moji=mb_substr($data,$i,1,"SJIS");

> mbereg("/[A-Z]./",$moji)

mb_ereg( "[A-Z]", $moji ) ※数字・英小文字も同様。

とかじゃないかなーと思わないでもなかったり。
    • good
    • 0
この回答へのお礼

自分がmb_substr関数の使い方を間違って覚えていたみたいです…
うまく動くようになりました。ありがとうございました。

お礼日時:2008/09/14 18:38

なんか数があわないとおもったら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;
?>
    • good
    • 0
この回答へのお礼

間違いに指摘されて今気づきました。大変申し訳ありませんでした。
こっちのほうが処理が簡単そうですね。使ってみたいと思います。
ご回答ありがとうございました。

お礼日時:2008/09/14 18:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!