みなさんこんにちは。
このコラムでは、PHP技術者認定試験(初級)の出題範囲の中から、「PHP初心者だった自分に教えたい小ネタや技術」を、全18回に渡って解説していきます。
第11回目のテーマは『大小の判定』です。
大小の判定とは、二者のうちどちらが大きいかという判断ですが、これを利用すると複数の値の順序を並び替える(ソートする)ことができます。
意外なソート結果
例えば写真ファイルをファイル名の昇順で並び替えると、次のようになります。想定通りですよね。
1. 旅行の写真_1.jpg
2. 旅行の写真_2.jpg
3. 旅行の写真_3.jpg
4. 旅行の写真_4.jpg
5. 旅行の写真_5.jpg
ところがファイルを増やすと次のように並びます。「10が2より小さいってどういうこと?」と思いますよね。
1. 旅行の写真_1.jpg
2. 旅行の写真_10.jpg
3. 旅行の写真_2.jpg
4. 旅行の写真_3.jpg
5. 旅行の写真_4.jpg
6. 旅行の写真_5.jpg
7. 旅行の写真_6.jpg
8. 旅行の写真_7.jpg
9. 旅行の写真_8.jpg
10. 旅行の写真_9.jpg
上記の例では、「旅行の写真_10.jpg」と「旅行の写真_2.jpg」を、文字列として比較しています。文字列として比較というのは、先頭から1文字ずつ比較するということです。
HRphp_11
前半の「旅行の写真_」まで比較した時点では、両者に差はありません。続いて次の「1」と「2」を比較すると「1」の方が「2」より小さいため、「旅行の写真_10.jpg」の方が小さいと判断されます。
よって、さらにたくさんのファイルがあると、次のような並び替えになります。
1. 旅行の写真_1.jpg
2. 旅行の写真_10.jpg
3. 旅行の写真_100.jpg
4. 旅行の写真_11.jpg
5. 旅行の写真_12.jpg
6. 旅行の写真_13.jpg
7. :
8. 旅行の写真_19.jpg
9. 旅行の写真_2.jpg
10. 旅行の写真_20.jpg
11. 旅行の写真_21.jpg
12. :
ただし、数値が連続している部分は文字列ではなく数値として比較してくれる賢いソフトウェアやアプリもあります。その場合は、以下のように並びます。
1. 旅行の写真_1.jpg
2. 旅行の写真_2.jpg
3. 旅行の写真_3.jpg
4. 旅行の写真_4.jpg
5. 旅行の写真_5.jpg
6. 旅行の写真_6.jpg
7. 旅行の写真_7.jpg
8. 旅行の写真_8.jpg
9. 旅行の写真_9.jpg
10. 旅行の写真_10.jpg
型による大小比較結果の違い
PHPを使うときは、数値として比較するのか、文字列として比較するのかを意識することが重要です。ファイル名のソートならともかく、決済システムで「10万円」が「2万円」より少なかったら問題になりますよね。
PHPで型のことを考えずに比較をするとバグの原因になります。以下の式はすべて true ですが、意外なものはありませんか。
この続きは以下をご覧ください
(リンク »)
お問い合わせにつきましては発表元企業までお願いいたします。