質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • PHP

    20286questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHP echo strcmp(2, "2member"); //-6

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 329

marimokomokmOk

score 46

何故これが-6になるのでしょうか。

echo strcmp(2, "2member"); //-6

"a" と "ab"だったら "ab"の方が大きいのでしょうか。
どのような規則があるのでしょうか。

echo strcmp("a", "ab"); //-1
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+3

一般的には辞書式順序に従って並べたときの前後関係で比較します。
この場合、両者の文字数が異なる場合は、短いほうの末尾に(長さが同じになるように)空白が付与されたものとして取り扱います。
つまり、"a" は "a " として "ab" と比較します。" " は "b" より文字コードとしては小さいので、"a" < "ab" になるのです。

余談:
上の条件に従うと、
1
10
2
という並び順になります。
これだと少々問題がある場合は、PHP なら Collator クラスを利用することで、
1
2
10
と並ぶようにできたりします。

さらに余談

(2 == "2member") は true になります。
これは数値と文字列を比較演算子の == で比較する場合、文字列を数値に変換して処理する(ために member が無視されて 2 となる)という動きをするからです。
(2 === "2member") は、型が違うので false となります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/12 15:52

    丁寧にご教示下さりありがとうございます
    なぜ
    echo strcmp("a", "ab"); //-1なるか意味が理解できました^^

    なぜ
    echo strcmp(2, "2member"); //-6
    になるか謎です

    キャンセル

  • 2017/04/12 15:55

    strcmp の場合は文字列と文字列の比較です。strcmp(2, "2member") は、最初の引数の 2 を文字列に変換して、strcmp("2", "2member") として処理されるので、<0 な値が返ります。なぜこれが -6 なのかは……実装依存なのです。言えるのは <0 の値が返るという仕様は満たしている、というだけです。

    キャンセル

+2

int strcmp ( string $str1 , string $str2 )

str1 が str2 よりも小さければ < 0 を、str1が str2よりも大きければ > 0 を、 等しければ 0 を返します。

echo strcmp(2, "2member"); //-6
echo strcmp("a", "ab"); //-1

合ってますよね?
同じ文字数になるまでnullが追加されるようなイメージですよね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/12 15:43

    ありがとうございます
    http://qiita.com/icelandnono/items/adbef6eda6de7218d7e4#strcmp
    にまとめました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    PHP ユーザ定義関数の書き方について

    前提・実現したいこと 3桁の数字の配列が、変数$iの数字と一致(数字の並び順は関係なし)していたら、 "OK"のメッセージを表示させるプログラムを書きたいです。 発生して

  • 解決済

    PHP:パスワードが一致したときのみ、投稿の削除をする簡易掲示板

    パスワードが一致したときの条件式をプログラムに書いても反応しません。/ファイル消去/ブロックの6行目あたりにあるif文のandの右側の条件式です。この式で使われている$delDat

  • 解決済

    phpで連想配列のキーが変数の場合の値取得方法

    お世話になっております。 初心者の問い合わせ失礼します。 件名の通りなのですが $seihinMeisyou = array( [pen] => 'ぺん', [a

  • 解決済

    phpでのエラー

    $Swich = "WHERE"; $SQL = <<<SQL SELECT * FROM 顧客マスタ SQL; /*SQL作成*/ if ($顧客名 != ""

  • 解決済

    PHP

    PHPでエラーが起きてしまいました。 何故でしょうか。 if(isset($_POST['command']) && !$_POST['command'] == '

  • 解決済

    echoで$をつけるとエラーになる。

    前提・実現したいこと 下記のように直前で変数の中身が出力されているのに、"$test:"にするとエラーになります。 原因がわかりません。 ご教授お願い致します。 該当のソースコ

  • 解決済

    PHPでカレンダーを表示させたいのですが・・・

    PHPでカレンダーを表示したいのですが・・・。 表示形式は 1日(日) 2日(月) 3日(火) と続くようにしていきます。 これは実際にできました。これを使って、土曜日は青、日

  • 解決済

    php ログインできなくなる

     前提・実現したいこと phpでログインシステムを実装中に以下のエラーが発生しました。  発生している問題・エラーメッセージ Warning: session_start():

同じタグがついた質問を見る

  • PHP

    20286questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。