MW211 EXIT

devlog
PHP/foreachの参照渡しの場合の注意点
2012年02月29日
┌──────────────────────────────────────┐
│foreach ($a as &$value) {                                                   │
│  $value ='z';                                                              │
│}                                                                           │
└──────────────────────────────────────┘
foreachの参照渡しの場合の注意点。

┌──────────────────────────────────────┐
│foreach ($a as &$value) {                                                   │
│  $value ='z';                                                              │
│}                                                                           │
│unset($value)                                                               │
└──────────────────────────────────────┘
unset()すること。

とにかく絶対にだ。
分類:PHP、注意
正規表現/数値(4)
2012年02月28日
2桁数字限定の簡単技。
0~99  →  /^[1-9]?\d$/
1~99  →  /^[1-9]\d?$/

3桁以上になると、これらは使えない
0~999  →  /^[1-9]?\d\d$/  …①
1~999  →  /^[1-9]\d\d?$/

①で「01」が通ってしまうのだ。
分類:正規表現
PHP/value属性のないPOSTの内容
2012年02月25日
┌──────────────────────────────────────┐
│<input type="hidden" name="キー" value="値"/>                               │
└──────────────────────────────────────┘
name属性とvalue属性を設定して、POSTでsubmitすれば
「$_POST['キー'] = '値'」が送信される。

name属性がない場合、例えばid属性とかだった場合は、「$_POST」は送信されない。
┌──────────────────────────────────────┐
│<input type="hidden" id="キー" value="値"/>                                 │
└──────────────────────────────────────┘

では、(name属性はあるのに)value属性がない場合、どうなるのか?
┌──────────────────────────────────────┐
│<input type="hidden" name="キー"/>                                          │
└──────────────────────────────────────┘
「$_POST['キー'] = ''」が送信される。
つまり、そのname属性で送信はされる。
ただ中身は、NULLと思いきや「''」(空文字)なんだね。
分類:PHP
正規表現/数値(3)
2012年02月24日
小数点以下も含めたい場合。

「-999.99~999.99」の範囲としたい場合。

「((0|\-?[1-9]\d{0,2})(\.\d{2})?)」

「.」だけではだめ「.00」と小数点以下の数字が必要ってこと。

「((0|\-?[1-9]\d{0,2})(\.\d{1,2})?)」

こうすれば「9.99」でも「9.9」でもOKとなる。
分類:正規表現
正規表現/数値(2)
2012年02月23日
負の数も含めたい場合。

「-999~999」の範囲としたい場合。

「(0|\-?[1-9]\d{0,2})」

「0」と「-999~-1」「1~999」みたいな感じか。
分類:正規表現
正規表現/数値(1)
2012年02月22日
「0123456789」を表すものは「[0-9]」か「\d」。

なので「\d\d\d」とすれば「000~999」の数値を表すことができる。

だが、数値は「001」ではなく「1」と書くもの。

なので、「1~999」としたい。

それには「[1-9]\d{0,2}」。

あ、「0」が抜けている、「0~999」だ。

でも「0」は別枠にせねばなるまい、よってこう。

「(0|[1-9]\d{0,2})」

「0」か「1~999」で「0~999」。
分類:正規表現
正規表現/任意の文字
2012年02月21日
任意の文字的なものをまとめてみた。
「.」 …正規表現における任意の一文字
        数値表現における単なる小数点の場合もあるが
        任意の一文字は小数点一文字も含むので、
        小数点のつもりが気づかず勘違いしたままということもありうる
「*」 …MS-DOS(Windows)におけるワイルドカード
        正規表現的には「.*」と同等
        正規表現では「直前の文字を0回以上繰り返す」の意味となる
「%」 …SQLのLIKE検索におけるワイルドカード
「_」 …SQLのLIKE検索における任意の一文字
        Windows環境のファイル名に使えるなど各種制約にとらわれにくい文字で
        通常の世界ではこの文字自体をあまり使わないので
        空欄に見せて、任意、未決定もしくはトラブルによる欠落っぽいイメージを
        表現できる
「 」 …空欄として、任意、未決定もしくはトラブルによる欠落っぽいイメージを
        表現できるが、両端に配置する場合には、開始・終了の境界文字が必要で
        「 」を文中に許容する場合には見分けがつかないので使えない
        穴埋めテストで慣れ親しんでいるが、プログラムでは用いられない
「?」 …謎の一文字として、任意、未決定もしくはトラブルによる欠落っぽいイメージを
        表現できる
        実際に文字化けの場合「?」になるケースもある
        正規表現では「直前の文字を0~1回繰り返す」の意味となる
「0」 …数値項目を表す「0-9」
        特にゼロパディングを表す場合に使われる(Excelなど)
「9」 …数値項目を表す「1-9」「0-9」
        「0」との対比でゼロサプレイスを表す場合が多い
        COBOLの世界で9タイプといえば数値型を意味する
「#」 …数値項目を表す「1-9」「0-9」
        「0」との対比でゼロサプレイスを表す場合が多い(Excelなど)
「X」 …COBOLの世界でXタイプといえば半角文字型を意味する
「S」 …符号を表す「+-」
        大抵は符号がない場合(正の数の場合)も許容するので
        どちらかというと負の数を許容することを表すもの
「-」 …符号を表す「-」
        前述の「S」同様、負の数を許容することを表すもの
「N」…COBOLの世界でNタイプといえば全角文字型を意味する
        「NIHONGO」の頭文字か
「 」…「 」の全角版
        表示上、全角空白文字を特殊記号で表示する環境(エディタなど)でしか
        判別できないので、
「_」…「_」の全角版
        プログラム的にはほとんど用いられない(文書(仕様書等)の世界でのもの)
「■」…文字化けした場合に変換されやすい文字
        転じて任意の一全角文字を表すが
        プログラム的にはほとんど用いられない(文書(仕様書等)の世界でのもの)
「□」…穴埋め空欄的な表現
        プログラム的にはほとんど用いられない(文書(仕様書等)の世界でのもの)
「△」…仕様書上、全角空白を表す記号
        ちなみに「▲」が金額の前につくと「-」(負の符号)
他に以下など
「!」
「@」
分類:正規表現
正規表現/そっくりさん
2012年02月19日
そっくりさんだと微妙に違うが、これは正真正銘同じもの同士。

「[0-9]」=「\d」

「?」=「{0,1}」
分類:正規表現
PHP/SQL文のIN句をつくる(2)
2012年02月18日
┌──────────────────────────────────────┐
│$where = array(1,,,4,,5);                                                   │
└──────────────────────────────────────┘
上記のように抽出条件に空値が混じっている場合、これを除外するには
以下の方法が有効だ。
┌──────────────────────────────────────┐
│$in = implode(',', array_filter($where, 'strlen'))             →  「1,4,5」│
└──────────────────────────────────────┘
「array_filter(,'strlen')」は文字長のある配列要素のみを抽出してくれる。
それぞれを「strlen()」にて変換した結果、
値が0でないものを抽出してくれるという仕組みだ。
分類:PHP、SQL
PHP/SQL文のIN句をつくる(1)
2012年02月17日
┌──────────────────────────────────────┐
│$where = array(1,4,5);                                                      │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│SELECT 列                                                                   │
│    FROM 表                                                                 │
│    WHERE id IN (1,4,5);                                                    │
└──────────────────────────────────────┘
抽出したいIDを配列にあらかじめ格納しておいて、
そのIDに該当するものをSQL文で取得する場合、
配列をimplodeで一直線に並べて、SQL文に代入したやればよい
┌──────────────────────────────────────┐
│$in = implode(',', $where)                                     →  「1,4,5」│
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│SELECT 列                                                                   │
│    FROM 表                                                                 │
│    WHERE id IN ({$in});                                                    │
└──────────────────────────────────────┘

ちなみに、文字列の場合、「'」で囲う必要があるが、
これについては以下のようにしてやればよい。
┌──────────────────────────────────────┐
│$in = "'" . implode("','", $where) . "'"                 →  「"1","4","5"」│
└──────────────────────────────────────┘
分類:PHP、SQL
前へ 1 2 3 次へ