MW211 EXIT

devlog
PHP配列/先頭と末尾を取得(3)
2012年09月09日
あれ?よくよく考えると、やりたいことは元の配列に傷をつけずに、
先頭もしくは末尾のデータを取得すること。

これだけでよかった…んだね。

先頭データの値を取得する。
┌──────────────────────────────────────┐
│array_shift($配列);                                                         │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│reset($配列);                                                               │
└──────────────────────────────────────┘
末尾データの値を取得する。
┌──────────────────────────────────────┐
│array_pop($配列);                                                           │
└──────────────────────────────────────┘
  ↓
┌──────────────────────────────────────┐
│end($配列);                                                                 │
└──────────────────────────────────────┘
分類:PHP配列
PHP配列/先頭と末尾を取得(2)
2012年09月08日
前回の応用で、array_values()を使っても値が取得できる。
また、array_keys()を使えばキーまで取得できる。

先頭データのキーを取得する。
┌──────────────────────────────────────┐
│@array_shift(array_keys($配列));                                            │
├──────────────────────────────────────┤
│@reset(array_keys($配列));                                                  │
└──────────────────────────────────────┘
先頭データの値を取得する。
┌──────────────────────────────────────┐
│@array_shift(array_values($配列));                                          │
├──────────────────────────────────────┤
│@reset(array_values($配列));                                                │
└──────────────────────────────────────┘
末尾データのキーを取得する。
┌──────────────────────────────────────┐
│@array_pop(array_keys($配列));                                              │
├──────────────────────────────────────┤
│@end(array_keys($配列));                                                    │
└──────────────────────────────────────┘
末尾データの値を取得する。
┌──────────────────────────────────────┐
│@array_pop(array_values($配列));                                            │
├──────────────────────────────────────┤
│@end(array_values($配列));                                                  │
└──────────────────────────────────────┘

ワーニングが出るんで「@」も忘れずに。
分類:PHP配列
PHP配列/先頭と末尾を取得(1)
2012年09月07日
配列の先頭のデータを取得する関数。
┌──────────────────────────────────────┐
│array_shift($配列);                                                         │
└──────────────────────────────────────┘
配列の末尾のデータを取得する関数。
┌──────────────────────────────────────┐
│array_pop($配列);                                                           │
└──────────────────────────────────────┘
これらは、添字が連番じゃない時とか、非常に便利だ。

た・だ・し、重大な欠点がある。
取得した値を配列から除去してしまうという作用だ。
元々、そういう目的の関数を参照用に流用しているだけの話だ。

じゃどうすればよいか。
一旦、値渡しで何らかの一時配列に渡して、後は好きにやってくれってのが思い当たる。
┌──────────────────────────────────────┐
│$ワーク = $配列;                                                            │
│array_pop($ワーク);                                                         │
└──────────────────────────────────────┘

でも、なんかまどろっこしい。
一行でやれないものか。。。

ダミーで一関数噛ませてやって、ワーク変数的に扱えばいいじゃん。
ってことで、人畜無害な足し算関数「array_merge()」を使用。
┌──────────────────────────────────────┐
│array_pop(array_merge($配列));                                              │
└──────────────────────────────────────┘

しかしながら、敵もさるもの、ワーニングを吐いてしまう。
┌──────────────────────────────────────┐
│Strict Standards: Only variables should be passed by reference in …        │
└──────────────────────────────────────┘

う~ん、これでどうだ。(なんか無理やり)
┌──────────────────────────────────────┐
│@array_pop(array_merge($配列));                                             │
└──────────────────────────────────────┘
分類:PHP配列
jQuery/リアルタイムAjax表示のエラー
2012年09月06日
AjaxでJSON形式のデータを取得し、表示中の内容を書き換える処理を
断続的に行ったりすると、エラーが発生する。
どうも「TypeError」が発生するようなのだが、なんでだろう。
┌──────────────────────────────────────┐
│function autoFunc() {                                                       │
│    $.getJSON('AjaxURL',                                                    │
│              function(json) {                                              │
│                  try {                                                     │
│                      if (json) {                                           │
│                          $('#this').text(json.data);                       │
│                      }                                                     │
│                  } catch (e) {                                             │
│                      if (e.name == 'TypeError') {                          │
│                          throw e;  // エラーを握り潰す                     │
│                      } else {  // 他エラーを調査                           │
│                          alert(e.name);                                    │
│                          alert(e.message);                                 │
│                      }                                                     │
│                  }                                                         │
│              }                                                             │
│    );                                                                      │
│    setTimeout(autoFunc, 1000);  // 1秒でリロード                           │
│}                                                                           │
└──────────────────────────────────────┘
ま、こんな感じで調査してみる。
分類:jQuery
PostgreSQL/日付を変更して更新
2012年09月05日
「年月日」の文字列、例えば「20120801」とかを一日前に置換するUPDATE文。
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 日付 = TO_CHAR(TO_DATE(日付, 'YYYYMMDD') - 1, 'YYYYMMDD');          │
└──────────────────────────────────────┘
「20120731」になる。
分類:PostgreSQL
PHP/日付チェックと日付変換
2012年09月04日
年月日をチェックしてくれる便利な関数「checkdate()」と、
チェックした後の日付をタイムスタンプに変換してくれる便利な関数「mktime()」。

二人の連携は見事にとれている…と思ったけど。
「mktime()」は2038年以降NGなのにも関わらず「checkdate()」はOKを出す。
「checkdate()」は32767年までOKなのだ。

う~ん。
分類:PHP
剰余計算プラス
2012年09月03日
剰余計算で剰余ゼロの場合、割った数が欲しいケースってありますよね。
例えば、3の剰余を求める場合
  1  →  剰余1  →  解1
  2  →  剰余2  →  解2
  3  →  剰余0  →  解3
  4  →  剰余1  →  解1
  5  →  剰余2  →  解2
  6  →  剰余0  →  解3
こんな感じ。
これを行う最適な方法とは?
分類:【未解決】
PostgreSQL/条件でログを削除する
2012年09月02日
年月日時分秒ごとにデータを記録しているログデータについて、
翌日になったらクリアしてから追加していくトリガ関数は以下のような感じ
┌──────────────────────────────────────┐
│DECLARE                                                                     │
│    pl_yyyymmdd CHAR(8);                                                    │
│                                                                            │
│BEGIN                                                                       │
│    SELECT INTO pl_yyyymmdd                                                 │
│                SUBSTR("yyyymmddhhiiss", 1, 8) AS "yyyymmdd"                │
│        FROM 表;                                                            │
│                                                                            │
│    IF TG_OP = 'INSERT' THEN                                                │
│        IF SUBSTR(NEW.yyyymmddhhiiss, 1, 8) <> pl_yyyymmdd THEN             │
│            DELETE FROM 表;                                                 │
│                                                                            │
│            RETURN NEW;                                                     │
│        END IF;                                                             │
│    END IF;                                                                 │
│                                                                            │
│    RETURN NEW;                                                             │
│END;                                                                        │
└──────────────────────────────────────┘
こいつをトリガとして登録すればOK。
┌──────────────────────────────────────┐
│CREATE TRIGGER トリガ                                                       │
│  BEFORE INSERT                                                             │
│  ON 表                                                                     │
│  FOR EACH ROW                                                              │
│  EXECUTE PROCEDURE トリガ関数();                                           │
└──────────────────────────────────────┘
これってINSERTの度に判断するんだろうけど、負荷がかかるのだろうか?

DELETEに代えてTRUNCATE TABLEにしようとしたら、エラーとなった。
┌──────────────────────────────────────┐
│DECLARE                                                                     │
│    pl_yyyymmdd CHAR(8);                                                    │
│                                                                            │
│BEGIN                                                                       │
│    SELECT INTO pl_yyyymmdd                                                 │
│                SUBSTR("yyyymmddhhiiss", 1, 8) AS "yyyymmdd"                │
│        FROM 表;                                                            │
│                                                                            │
│    IF TG_OP = 'INSERT' THEN                                                │
│        IF SUBSTR(NEW.yyyymmddhhiiss, 1, 8) <> pl_yyyymmdd THEN             │
│            TRUNCATE TABLE 表;                                              │
│                                                                            │
│            RETURN NEW;                                                     │
│        END IF;                                                             │
│    END IF;                                                                 │
│                                                                            │
│    RETURN NEW;                                                             │
│END;                                                                        │
└──────────────────────────────────────┘
これからINSERTしようとする表をDDLのレベルでは操作できないようだ。
ま、全件削除ってより、1ヶ月過ぎたのを削除とかが普通かも。
分類:PostgreSQL
jQuery/closest()は便利
2012年08月30日
まずは、それぞれが指し示すもののおさらい。
  ①$(this).parent().parent('tr')
  ②$(this).parents('tr')  または$(this).parents().find('tr')
  ③$(this).closest('tr')
┌──────────────────────────────────────┐
│└tr          ←②                                                          │
│  └td                                                                      │
│    └table                                                                 │
│      └tr    ←①②③                                                      │
│        └td                                                                │
│          └this                                                            │
└──────────────────────────────────────┘
帯に短し(parent()=厳密に指定する必要あり)、
襷に長し(parents()=余計なものも拾ってくる恐れあり)。
closest()さんは便利なのです。

┌──────────────────────────────────────┐
│└tr                                                                        │
│  └某                                                                      │
│    └this                                                                  │
└──────────────────────────────────────┘
なのか
┌──────────────────────────────────────┐
│└tr                                                                        │
│  └某                                                                      │
│    └某                                                                    │
│      └this                                                                │
└──────────────────────────────────────┘
なのか、微妙な時に、parent()じゃ無理だけど、parents()じゃ心もとない。
そんな時にはclosest()さん。
分類:jQuery
jQuery/.attr()と.prop()の違い
2012年08月29日
毎度、毎度、混乱すると「.attr('disabled', 'disabled');」
「.prop('disabled', true);」の違い。

いい加減まとめておかねば、また混乱しそう。

まずjQuery1.6で「.prop()」が追加されたらしい。

inputタグとかでは、「.attr('value')」は初期値(既定値)を取得するけど
「.prop('value')」は入力中の値を取得できるらしい。

ま、これが両者の個性を端的に示す一例ってことだろう。

ま、当初は明確に分離しようとしてたらしいけど反発をくらって
「.attr()」が後方互換を維持することになり、
「.attr()」⊃「.prop()」ってことらしい(だからややこしい)。

基本、HTML属性は「.attr()」、JavaScriptプロパティは「.prop()」って
覚えればいいらしく、「.attr('disabled', 'disabled');」より
「.prop('disabled', true);」が推奨みたい。

う~ん、disabledってHTML属性じゃないのか。。。?

あ、動的に変化するやつ、させるやつは「.prop()」なんだ。

静的=「.attr()」、動的=「.prop()」なのだね、納得。
分類:jQuery
前へ 1 … 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 … 156 次へ