MW211 EXIT

devlog
PHP/配列から重複を除外する方法
2011年08月20日
単純な一次元配列では以下の通り。
┌──────────────────────────────────────┐
│$配列 = array_unique($配列);                                                │
└──────────────────────────────────────┘

「''」を除去したい場合は以下の通り。
┌──────────────────────────────────────┐
│$配列 = array_merge(array_diff($配列, array('')));                          │
└──────────────────────────────────────┘
分類:PHP配列
PHP/ループ時の注意点
2011年08月19日
┌──────────────────────────────────────┐
│for (ループ条件) {                                                          │
│  if (ループの先頭に戻る条件) {                                             │
│    continue;                                                               │
│  }                                                                         │
│  // 実行しない処理                                                         │
│}                                                                           │
└──────────────────────────────────────┘
for文(ループ文)を途中で元に戻る(後続をスキップする)場合には
「continue」文を使うが、
switch-case文で条件分岐してこれを行う場合、
PHPではswitch-case文もループ文の一種とみなされるので
(二重にcontinueするように)「continue 2」としなければならない。
┌──────────────────────────────────────┐
│for (ループ条件) {                                                          │
│  switch (ループの先頭に戻る条件) {                                         │
│    case  '(該当する条件)':                                                 │
│      continue 2;                                                           │
│  }                                                                         │
│  // 実行しない処理                                                         │
│}                                                                           │
└──────────────────────────────────────┘
分類:PHP
PHP/タイムゾーンの設定
2011年08月18日
php.iniファイルに以下のような感じで設定する。
┌──────────────────────────────────────┐
│[Date]                                                                      │
│date.timezone = Asia/Tokyo                                                  │
└──────────────────────────────────────┘

プログラム中で設定する場合は以下のような感じ。
┌──────────────────────────────────────┐
│date_default_timezone_set('Asia/Tokyo');                                    │
└──────────────────────────────────────┘
分類:PHP
CSS/背景色を透明にする
2011年08月17日
background-color:transparent;
分類:CSS
PHP/if-else文をswitch-case文に書き換える
2011年08月16日
┌───────────┐
│if (判定文1) {        │
│  処理1;              │
│} else if (判定文2) { │
│  処理2;              │
│} else if (判定文3) { │
│  処理3;              │
│} else {              │
│  処理4;              │
│}                     │
└───────────┘
上記は下記のように書き換えられる。
┌───────────┐
│switch (TRUE) {       │
│  case (判定文1):     │
│    処理1;            │
│    break;            │
│  case (判定文2):     │
│    処理2;            │
│    break;            │
│  case (判定文3):     │
│    処理3;            │
│    break;            │
│  default:            │
│    処理4;            │
│    break;            │
│}                     │
└───────────┘
分類:PHP
switch-case文の字下げ(インデント)
2011年08月15日
switch-case文は、caseを一段下げると見やすいので、
以下のような感じで字下げを行っていた。
┌───────────┐
│switch (判定項目) {   │
│  case 判定値:        │
│    処理;             │
│    break;            │
│  case 判定値:        │
│    処理;             │
│    break;            │
│  default:            │
│    処理;             │
│    break;            │
│}                     │
└───────────┘
だが、処理中にif文のネストを入れてみると、caseと同じ階層に閉じ括弧「}」がなく
間延びしていることがわかる。
┌───────────┐
│switch (判定項目) {   │
│  case 判定値:        │
│    if (判定文) {     │
│      if (判定文) {   │
│        if (判定文) { │
│          処理;       │
│        }             │
│      }               │
│    }                 │
│  @←この階層に「{」がない
│    break;            │
~~~~~~~~~~~~~
│}                     │
└───────────┘
ということで、以下のようにswitchの階層とcaseの階層を同一としようと思う。
┌───────────┐
│switch (判定項目) {   │
│case 判定値:          │
│  処理;               │
│  break;              │
│case 判定値:          │
│  処理;               │
│  break;              │
│default:              │
│  処理;               │
│  break;              │
│}                     │
└───────────┘
ちょっと違和感があるが、慣れの問題なのだろう。
ちなみにif-else文との対応関係であれば、以下のような感じだ。
であれば、後者(右)に統一したと思えばいい。
┌───────────┐┌───────────┐
│if (判定文) {         ││if (判定文) {         │
│    処理;             ││  処理;               │
│  } else if (判定文) {││} else if (判定文) {  │
│    処理;             ││  処理;               │
│  } else {            ││} else {              │
│    処理;             ││  処理;               │
│}                     ││}                     │
└───────────┘└───────────┘
┌───────────┐┌───────────┐
│switch (判定項目) {   ││switch (判定項目) {   │
│  case 判定値:        ││case 判定値:          │
│    処理;             ││  処理;               │
│    break;            ││  break;              │
│  case 判定値:        ││case 判定値:          │
│    処理;             ││  処理;               │
│    break;            ││  break;              │
│  default:            ││default:              │
│    処理;             ││  処理;               │
│    break;            ││  break;              │
│}                     ││}                     │
└───────────┘└───────────┘

…と思ったが、使ってみるとことのほか見づらい。
if文を使わずswitch-case文を使っているメリットが半減したようだ。
ということで、特例的に字下げは元のままとしようと思う。
これはあくまで与太話ということで。。。
分類:設計
MicrosoftExcelの小ネタ(2)
2011年08月12日
通常、結合セルを生成する時、左上端(もしくは値のあるセル)のみの値を残し
それ以外の値は初期化されてしまう。

しかし、結合セルに対して、
「形式を選択して貼り付け」で「数式」を選択してコピーすると、
全てのセルに同じ値が入る。

ただし、それが何に有効なのか(何に使えるのか)は定かではない。
分類:Excel
(無題)
2011年08月08日
Happy Birthday to You!
ER図の矢印の向き
2011年08月04日
電流はプラス極からマイナス極へ進むが、
その中を流れる電子はマイナス極からプラス極へ進むらしい。

ER図の矢印は「1対多」関係の場合、「1 → 多」の向きに矢印を記述するものだ。
しかし、外部キーと主キーの関係についてポインタ的矢印で表すと
「外部キー → (参照先テーブルの)主キー」の方がわかりやすい。

例えば、個人が属している組織名を取得する場合
「(個人の外部キーである)組織ID → (組織の主キーである)組織ID (→組織名)」
みたいな流れだとわかりやすい。

しかし、これだと「個人 → 組織」で、「多 → 1」と矢印の向きが逆になる。
「個人」から「組織」(名)は一意に決まるのだから、「個人 → 組織」の矢印の向きだ。

う~ん、ややこしい。
表単位では「→」でも、列単位だと「←」となってしまう感じだ。

この紛らわしさを回避するために、表単位の「1 → 多」の矢印を、
別の記号(「─●」とか「─∈」(カラスの足)とか)にする場合もあるようだ。

ちなみに「外部キー」とそれが指し示す「主キー」の関係って
「大企業の平社員」と「下請け先の中小企業の社長」みたいな関係だなと思った。
分類:設計
矛盾
2011年08月02日
(C言語系プログラムの)コーディング規約で、
「switch-case文にはdefaultおよびbreakを必ず記述すること」ってのと、
「実行されない処理は記述しないこと」ってのが、併存していることがある。
break直前にcontinueを記述することになったら…。

追記:continueを禁止にすればよいか。。。
分類:設計
前へ 1 2 次へ