大小の判定

Human Resocia Co.,Ltd.

2015-12-07 09:00

ヒューマンリソシア株式会社はコラム「大小の判定」を公開しました。
###

みなさんこんにちは。
このコラムでは、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 ですが、意外なものはありませんか。

この続きは以下をご覧ください
(リンク »)
本プレスリリースは発表元企業よりご投稿いただいた情報を掲載しております。
お問い合わせにつきましては発表元企業までお願いいたします。

【企業の皆様へ】企業情報を掲載・登録するには?

御社の企業情報・プレスリリース・イベント情報・製品情報などを登録するには、企業情報センターサービスへのお申し込みをいただく必要がございます。詳しくは以下のページをご覧ください。

ZDNET Japan クイックポール

所属する組織のデータ活用状況はどの段階にありますか?

NEWSLETTERS

エンタープライズコンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]