ハマっている「お菓子」を教えて!

文字列の長さがとれなくて困っています。
プログラムは、以下の通りです。
実行すると、1の箇所で66になります。
次に値の文字数(2の箇所)を出そうとすると、6と出てしまいます。
見ていると、$sumkey1を変数ではなく文字列として見入るみたいなのですが、
直前に、直接数字を代入するとちゃんとした値がとれます。

どうしたらよいか、わかる方いらしたら教えてください。

<?php
$a= abcde12345678912345678912345678912;
for($h=1; $h<5; $h++){
for($i=0; $i<8; $i++){
if($h == 1){
$sumkey1= $sumkey1 + hexdec(substr($a ,$i,1)) . "<br>";
}else if($h == 2){
$sumkey2= $sumkey2 + hexdec(substr($a ,$i+8,1)) . "<br>";
}else if($h == 3){
$sumkey3= $sumkey3 + hexdec(substr($a ,$i+16,1)) . "<br>";
}else if($h == 4){
$sumkey4= $sumkey4 + hexdec(substr($a ,$i+24,1)) . "<br>";
}
}
}
//最初の8つを16から10進数にして足した値
echo $sumkey1 . "<br>"; //1
//文字列の長さ
echo strlen($sumkey1). "<br>"; //2
//文字列?
echo var_export(is_numeric($sumkey1), true); //3
?>

A 回答 (1件)

<?php



//おちつかないので配列使わせてください。
$sumkey = array();
$a= "abcde12345678912345678912345678912";

for($h=0; $h<6; $h++){ //都合上ここ変更
$sumkey[$h] = 0;
for($i=0; $i<8; $i++){
//phpは
//http://d.hatena.ne.jp/gallu/20061108/p1
//とかいう変態的な挙動をするので途中足される4文字は数値として解釈できないから
//算術演算子+の引数の時に時に無視されて
//普通に計算されているように見えるのです。
//計算結果66(2文字)の最後に文字列リテラルで"<br>"の4文字を足してたら6文字になるよな。
$sumkey[$h]= $sumkey[$h] + hexdec(substr($a ,8 * $h + $i ,1)) ;
}
}


//まぁ別にsprintfしなくてもいいんですけどね。
echo sprintf("%d",$sumkey[0]) . "\n";
echo sprintf("%d",strlen(sprintf("%d",$sumkey[0])));

?>
    • good
    • 0
この回答へのお礼

読みづらくて、すいません。m(__)m
まだ始めたばかりで、構文側がわからなかったのでとりあえずで作っていました。

理解できました。
ありがとうございました。
見えるもの全てではないんですね。
勉強になりました。ありがとうございました。

お礼日時:2008/09/30 16:31

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


おすすめ情報