LoginSignup
0
0

More than 3 years have passed since last update.

%dって何?色々調べてみた

Posted at

昨日、2ケタ✕2ケタの計算問題を作るプログラムをつくったら、コードについて早速突っ込まれました。

<?php
for($i = 1; $i <= 20; $i++) {
  $a = rand(10, 99);
  $b = rand(10, 99);
  $ans[] = $a * $b;
  printf("<p>(%02d) %d ✕ %d =</p>", $i, $a, $b);
}
echo implode(', ', $ans). '<br>';
?>

コードを作成してくださった方:iiOOii さん
また、変数a, b の記述についてはshiracamus さんに教えていただきました。
ありがとうございます。

僕のコードではforeachやifを使っていましたが、使わなくても記述ができるらしく。
教えてくださったコードについて色々調べてみました。

知らないコードばっかりでした笑

まだまだだな、と思い知らされます。
それもそのはず、まだ始めて1週間も経っていません。

ということで、知らないコードについて調べてみました。

  • printf
  • %d, %02d
  • implode

ほぼ全部知らないわけですが笑、頑張って調べました。
ということで、自分用に一つずつまとめていきます。

printf

以下、php公式より引用したものです。

フォーマット済みの文字列を出力する
printf ( string $format , mixed ...$values ) : int
format にしたがって、出力を生成します。

これだけ見たところで何も分かりませんが、指摘されたコードで何となくわかってきました。

printf("<p>(%02d) %d ✕ %d =</p>", $i, $a, $b);

確かpythonの出力はprintで表されるんですよね(phpはecho)。それに近い形なので、これも出力に関係しているのかなと推測できました。

そしてこのprintfは、出力変換指定子と言うそうです。出力形式を指定するときに使うらしい。
何となく分かってきました。

%d

printfは解決したものの、次にぶち当たる壁が%d

printf("<p>(%02d) %d ✕ %d =</p>", $i, $a, $b);

この%d、特に番号が割り振られていたりしないので「は?何この文字列」と首を傾げてしまいましたが笑、printfを見るとわかりました。

  • 一つ目の%02d$i
  • 二つ目の%d$a
  • 三つ目の%d$b

を呼び出しているみたいです。

dの部分についても色々と調べてみました。
どうやら符号ありの10進数を示すそうです。

ほかにも、文字列を指定したいときは%sを使うようですね。

%02dの「02」が表すもの

これは「0」「2」だけ、「20」と書いた場合などを調べてみましたが、
02で「数字を2ケタにそろえる」という意味っぽいです。
これで問題番号が1~9の場合は先頭に0がつくようになりました。

僕はこの処理をわざわざif構文で書いていたので笑、とても記述量が多くなっていました。

implode

こちらは調べると意外と簡単な関数でした。

implode(', '. $ans). '<br>';

これは$ans(answersの略)のそれぞれの要素の間に,をブチ込むという便利な代物です。
,おいにしたら、ちゃんと情緒不安定なヤツみたいになります。

$ans = [506, 1260, 1764, 720]
implode('おい '. $ans). '<br>';

//出力結果
506おい 1260おい 1764おい 720

これ、凄いのが出力の最後がカンマで終わらないこと。
上の例で言ったら720の後においがついていませんよね。
これはどこかで応用できそうです。

まとめ

以上の内容を踏まえて、コードをもう一度見直してみました。

<?php
for($i = 1; $i <= 20; $i++) {
  $a = rand(10, 99);
  $b = rand(10, 99);
  $ans[] = $a * $b;
  printf("<p>(%02d) %d ✕ %d =</p>", $i, $a, $b);
}
echo implode(', ', $ans). '<br>';
?>

とてもスッキリしていて気持ちがいい!
新しくプログラムを作るときは、なるべく記述量を節約していきたいなと思います。

繰り返しになりますが、教えてくださったiiOOii さん、shiracamus さん。ありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0