タグ

ブックマーク / fbis.hatenablog.com (2)

  • 配列か連想配列かを判別する - Unknown::Programming

    PHPにおいて、ある配列が連想配列として使われているのかどうかを判別したい場合どうすればいいのか。 色々調べてたらこんな記事を発見しました。 <?php function is_hash(&$array) { return array_keys($array) !== range(0, count($array) - 1); } テレパス・ラボ : 連想配列 判定関数(is_hash) なるほど。 array_keysで配列のキー一覧を取得し、そのキー一覧が0からの連番になっているかどうかを比較すれば、対象の配列が配列なのか連想配列なのかを判別できるという理屈ですね。 確かにこれで判別ができそうです。 ですがひとつだけ気になる部分があって、array_keysやrangeを使って一時的な配列を確保しているのは無駄が多いのではないかと。 対象となる配列が大きければ大きいほどメモリ効率が悪くな

    配列か連想配列かを判別する - Unknown::Programming
    raimon49
    raimon49 2010/02/01
    たしかに先頭キーだけ見て緩く判定しても問題になる場面は少ない気がする。
  • PHP「"0x0A" == "10"はTRUEですがよろしいですか」 - Unknown::Programming

    ぼく「えっ」 PHP「"0x0A" == "10"はTRUEになりますが」 ぼく「いえFALSEです」 PHP「えっ」 ぼく「えっ」 PHP「まだ比較したことがないということでしょうか」 ぼく「えっ」 PHP「えっ」 ぼく「変化するってことですか」 PHP「なにがですか」 ぼく「型が」 PHP「ああ文字列でも整数っぽい文字列なら自動で型変換されますよ」 ぼく「そうなんだすごい」 PHP「では比較いたしましょうかTRUEですよ」 ぼく「でも"0x0A"は明示的にキャストしたら0になりますよね」 PHP「えっ」 ぼく「えっ」 PHP「ああ16進数のことなら比較の場合のみ10進数に自動で変換してから比較するんですよ」 ぼく「なにそれこわい」 PHP「"0x0A" == "+000010.0000000000000001"の場合もTRUEになります」 ぼく「なにそれもこわい」 PHP「えっ」 ぼく

    PHP「"0x0A" == "10"はTRUEですがよろしいですか」 - Unknown::Programming
    raimon49
    raimon49 2009/06/18
    うまいw
  • 1