PHP4以上で12345678910という数値が

あった場合に、全部足して、55という
処理をするにはどうしたらいいのでしょうか?
なんか関数みたいのありますか?

回答の条件
  • 1人5回まで
  • 登録:2006/09/15 12:16:47
  • 終了:2006/09/22 12:20:03

回答(3件)

id:saphil No.1

saphil回答回数36ベストアンサー獲得回数32006/09/15 13:11:20

ポイント27pt

配列を使うと、array_sum 関数とうものがあります。

以下スクリプトで、55 と出てきました。


$test = array(1,2,3,4,5,6,7,8,9,10);

print array_sum($test)."\n";

id:hopefully

これだと、12345678910が配列じゃないといけないんですよね?

12345678910というのは入力された値なので

それを配列に出来るんでしょうか?

2006/09/15 13:31:25
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912006/09/15 14:01:22

ポイント27pt

下記コメント参照(^^)

id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402006/09/15 14:14:19

ポイント26pt

システマチックにやると、

1+2+3+4+5+6+7+8+9+1+0=46

になって言語によらず無理だと思います。

id:hopefully

そうですね!!!!

間違えてました。

ごめんなさい。

12345678910の先頭9桁を

足すとか出来ますかね?

2006/09/15 14:42:47
  • id:taknt
    そんな関数は ないと思う。
    PHPは知らないが、他の言語だと

    12345678910が数値型の変数に入ってたら、それを文字列型の変数に入れなおして、それから 先頭から1文字ずつ取り出し、数値型にして 足していく
    という やり方でいいと思う。
  • id:Mook
    数字の10の部分は、1と0なのか10なのか、どうやって判別するのでしょうか。
    一桁ずつの和を求めるなら、
    <?php
    $snum="012345678910";
    for( $i=1 ; $i<=strlen($snum) ; $i++ ) {
    $sum += substr($snum, $i, 1 );
    }
    echo "合計$snum = $sum";
    ?>
    でできますが、答えは45になります。
  • id:taknt
    ああなるほど。
    0という値は、存在しないという前提で
    左からじゃなく、右から取得しないとダメですね。
    でも 2桁は 10だけ というようにしないと無理ですが。
    0だと 次の1文字と足して 数値とする。
    それ以外は、そのまま 足していくというようにする。
  • id:Mook
    確かに右からやっていけば、10の認識はできますね。
    この場合、扱える数字は 1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90 だけなので、
    汎用性がまったくないですね。

    なので、やはり数値は何らかの文字(空白も含む)で区切るのが正道でしょう。
    <?php
      $snum="1 2 3 4 5 6 7 8 9 10";
      $numArray = split( ' ', $snum );
      echo str_replace( " ", "+", $snum ) ."=". array_sum( $numArray )."<br>\n";
    ?>

    >扱える数字は 1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90 だけなので、
    という条件でもよければ、
    <?php
      $snum="12345678910";
      $rcd = ereg_replace('[1-9]', " \\0", $snum );
      $numArray = split( ' ', $rcd );
      echo "合計" ."=". array_sum( $numArray );
    ?>
    でできるかな。
  • id:Mook
    正規の回答はおふざけなので、ポイント不要です。

    上のコメントは、インデントに全角スペースを使用しているので、
    実際のコードとして使用するときは、半角への変換が必要です。
  • id:saphil
    最初に回答したものです。

    > それを配列に出来るんでしょうか?

    10を無視しても、良いということなので
    それなら可能ですね。


    > 間違えてました。
    > ごめんなさい。
    > 12345678910の先頭9桁を
    > 足すとか出来ますかね?


    「入力された数値を全て1文字単位に分けて足し算する」
    という仕様でしたら、Mook さんのサンプルが既に回答になっています。
    念のため、Mookさんのサンプルをお借りして記述させて
    もらいます。





    &gt;?php


    $snum="123456789123456789";

    //正規表現、勉強になりました。
    $rcd = ereg_replace('[1-9]', " \\0", $snum );

    // これで1文字ずつ配列に格納されます。
    $test = split( ' ', $rcd );

    // 配列の確認
    print_r($test);

    // 足し算実行 90になるはずです。
    print array_sum($test)."\n";

    // 90 と表示されました。

    ?>





  • id:Mook
    >$rcd = ereg_replace('[1-9]', " \\0", $snum );
    は一桁ずつに分離するということでしたら、
    $rcd = ereg_replace('[0-9]', " \\0", $snum );
    ですね。

    でないと、0が入った場合に、正常に動作しません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません