忍者ブログ

Wordpressメモとかアフィめもとか

Wordpress,PHP,アフィリエイトとかの個人メモを記録していくよ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHPの文字列比較 (数値型と文字列型の比較)

PHPでは文字列型と数値型を比較する場合など、違う型同士の比較は強制的に内部で型変換が行われているらしい。

引用:PHPマニュアル PHP:比較演算子

なので、↓のがtrueになる。

if ("1234abc" == 1234) {
  echo 'true';
} else {
  echo 'false';
}

これはPHPのバグではなくて仕様との事。
内部的に下記のようになっている。

if ((int)"1234abc" == 1234) {
  echo 'true';
} else {
  echo 'false';
}

(int)でint型にキャストされるため。

echo (int)"1234abc";すれば1234が出力される。

文字列型をint型にキャストすると以下のようになる。
echo (int)"1234abc";  //1234
echo (int)"0z1234abc";  //0
echo (int)"01234abc";  //1234
echo (int)"   1234abc";  //1234
echo (int)"abc";  //0

つまり、文字列の先頭が数値ならばそこの値を取得し、そうでなければ0になるとの事。

なので、両辺を""でくくって文字列型にそろえて比較するなどが必要。
ただし、両辺が数値型の場合は例外がある。

if ("1234.0" == "1234") {
  echo 'true';
} else {
  echo 'false';
}
この場合、文字列型で比較しているのでfalseなると思いきや、ならない。
PHPでは数値形式の文字列を比較する場合、整数として比較されるため。

なので、文字列の比較は"==="を使いましょうというお話。
perlでいうところの文字列比較eqと同じ使い方。

 

 

拍手[3回]

PR

Smartyテンプレートで{}を使う ldelim/literal

Smartyでサイトを作っているときにSmartyテンプレート内で変数や関数を呼び出す場合、{}をつかうけど、文字として{}を使用したい場合。
(Javascriptを埋め込むとか)

そのままSmartyテンプレートに{}を記述するとSmartyがエラーを吐き出してしまうので、次のようにする。

{ldelim}hogehoge{rdelim}


こうかくと実際には下記のように表示される。

{hogehoge}

{ldelim}{rdelim}だと1個だけしかエスケープできないのでまとめてやりたい場合は下記の方法でやる。

<script type="text/javascript">
{literal}
function ( test )
{
    if ( xxx > 0 ) {
        xxxx
    } else {
        zzzz
    }
}
{/literal} 
</script>


拍手[0回]

PHP 関数の戻り値を複数受取る方法

関数で複数の戻り値を戻したい場合、配列を使う。

function test() {
    $str = 'AAA';
    $no = '99';
    return array($str, $no);
}

list($str, $no) = test();


拍手[0回]

Call-time pass-by-reference has been removed

php.iniの設定でallow_call_time_pass_referenceをOFFにしていると出るエラー。
ONにすればOK

拍手[0回]

php 数値を3桁でカンマ区切り

金額表記のときとかにつかう正規表現を探していたら、関数がすでにあったのね、、、

サンプル
$num = 123456789;
$num_str = number_format($num);
echo $num_str;

結果
123,456,789

簡単。。

拍手[0回]

ブログ内検索

最新コメント

広告

プロフィール

なんとなくはじめてみたよ

忍者ツールズプロフィールは終了しました

カウンター