MW211 EXIT

devlog
PHP/【未解決】配列の列の横断的抽出
2012年06月27日
┌──────────────────────────────────────┐
│$array = array(                                                             │
│  1 => array('id' => 1, 'code' => 'a'),                                     │
│  2 => array('id' => 2, 'code' => 'b'),                                     │
│  3 => array('id' => 3, 'code' => 'c')                                      │
│);                                                                          │
└──────────────────────────────────────┘
例えば上記のような二次元配列があって、code列だけを抽出したい場合に、
簡単に実現できる方法はないものだろうか

以下のような力技が思いつくがもっとスマートにできないものか
┌──────────────────────────────────────┐
│function array_keys2($array, $key) {                                        │
│  $return = array();                                                        │
│  foreach ($array as $value1) {                                             │
│    foreach ($value1 as $key2 => $value2) {                                 │
│      if ($key2 === $key){                                                  │
│        $return[] = $value2;                                                │
│      }                                                                     │
│    }                                                                       │
│  }                                                                         │
│  return $return;                                                           │
│}                                                                           │
└──────────────────────────────────────┘
分類:PHP配列、【未解決】
SQL/【未解決】集合関数の組み合わせ
2012年06月26日
集約関数を複合させて使う場合
┌──────────────────────────────────────┐
│SELECT SUM(列1),                                                            │
│       MAX(列2)                                                             │
│    FROM 表;                                                                │
└──────────────────────────────────────┘
みたいに、合計値と最大値を同時に求めることはできる。

┌──────────────────────────────────────┐
│SELECT SUM(列1),                                                            │
│       MAX(列2),                                                            │
│       列3                                                                  │
│    FROM 表;                                                                │
└──────────────────────────────────────┘
みたいに、最大値をもつ列の別項目を取得するのはできるのだろうか?
分類:SQL、【未解決】
PostgreSQL/四捨五入の罠
2012年06月24日
「7÷4=1.75」なわけだが、(小数点以下を)四捨五入した場合「2」になるはずだ。
┌──────────────────────────────────────┐
│SELECT ROUND(7 / 4)  →  1                                                  │
└──────────────────────────────────────┘
でも、そうならない。。。

どうやら、浮動小数点とかが絡むと正確性がなくなるらしい(ありがちな話)。

numeric型を使えばよいみたい。
いろいろ試してみた。
┌──────────────────────────────────────┐
│SELECT ROUND(7                   / 4)  →  1(double precision型)  不正確    │
│SELECT ROUND(7::bigint           / 4)  →  1(double precision型)  不正確    │
│SELECT ROUND(7::integer          / 4)  →  1(double precision型)  不正確    │
│SELECT ROUND(7::double precision / 4)  →  2(double precision型)  不正確?  │
│SELECT ROUND(7::real             / 4)  →  2(double precision型)  不正確?  │
├──────────────────────────────────────┤
│SELECT ROUND(7::numeric          / 4)  →  2(numeric型)             正確    │
│SELECT ROUND(7::decimal          / 4)  →  2(numeric型)             正確    │
└──────────────────────────────────────┘
分類:PostgreSQL
jQuery/カプセル化
2012年06月23日
┌──────────────────────────────────────┐
│$(function() {                                                              │
│  処理                                                                      │
│});                                                                         │
└──────────────────────────────────────┘
jQueryの処理はたいてい以下の部分に書く。
なんでここに書くかは割愛するが(初期処理で起動してくれるみたいな感じか)、
最近以下のようなソースを見かけた。
┌──────────────────────────────────────┐
│(function($){                                                               │
│$(function() {                                                              │
│  処理                                                                      │
│});                                                                         │
│})(jQuery);                                                                 │
└──────────────────────────────────────┘
なんか、コメントには「カプセル化」とか書いてあった。

これは「$」を他に使っている環境下でjQueryを使う場合に
jQueryを保護してくれるカプセルのようなものらしい。
┌──────────────────────────────────────┐
│(function($){                                                               │
│  カプセル化するもの                                                        │
│})(jQuery);                                                                 │
└──────────────────────────────────────┘
「prototype.js」とか独自の定義とかそういうのが万が一あっても
影響を受けないようにするためとのこと。

汎用的なソースを提供しているのであれば、念のため備えておいた方がいいだろう。
ま、そこまでのご身分ではないので、しばらく無縁のようだ。(でいいの?)
分類:jQuery
jQuery/selectタグの変更
2012年06月22日
selectタグを変更するには以下の通り。
┌──────────────────────────────────────┐
│$('select').val(3);                                                         │
└──────────────────────────────────────┘
値(value)を指定してあげれば、それが選択された表示となる。
上記は「value」が「3」を選んだ場合。
選択肢の表示が「長嶋」になるはずだ。(うそ)
分類:jQuery
PHP/jQueryの$.get()とかを移植しようとしたが…
2012年06月21日
jQueryにおいて「$.get(URL,…);」などを使って、
別CGIからデータを取得したりする場合がある。

これをPHPにそのまま移植しようとして、
「file_get_contents()」を使ってみたのだがハマった。
(っていうかいまだに抜け出していない)

(1) 相対パスのURLが使えない
  jQueryでは相対パスもOKだったが、「file_get_contents()」の場合
  「http://」から書かないとエラーとなるみたい。

(2) 絶対パスで書くとセッション情報が共有できない
  「http://」から書いたら書いたで、あっち側の世界とこっち側の世界は
  別ものとなってしまうらしく、こっちでもっているセッション情報を
  相手に引き継げない

なんかいい方法はないものか。。。

今のところは、PHPに移植せず、PHP完了後、jQueryの初期処理で実行させて
PHPで最初にやってるっぽくすることしか方法はないのかも。
分類:PHP
PHP/タイムスタンプ型の値を1ヶ月後にする方法
2012年06月19日
まずは、「YYYY-MM-DD HH:II:SS +1 month」をstrtotime()で変換するために
文字列を編集する方法。
┌──────────────────────────────────────┐
│$timestamp = strtotime(date('Y-m-d H:i:s', $timestamp) . ' +1 month');      │
└──────────────────────────────────────┘
なんかまわりぐといような。。。

続いて、現在から1ヶ月後のタイムスタンプから現在のタイムスタンプを差し引いて
1ヶ月分のタイプスタンプを求め加える方法。
┌──────────────────────────────────────┐
│$timestamp += (strtotime('+1 month') - time());                             │
└──────────────────────────────────────┘
1ヶ月分のタイプスタンプがダイレクトに取得できればいいのだが。。。

★これはダメなことが後日判明しました
  詳しくは【訂正】で
分類:PHP
【未解決】jQuery/複数行のグループ化処理
2012年06月18日
例えば四行で一グループで、見出し列がrowspanで結合されていたりする明細で
まとめて処理をする方法はないものか。

こんな風になってしまう。。。
┌──────────────────────────────────────┐
│                     $(this).find(':checkbox').each(function() { 処理 });   │
│              $(this).next().find(':checkbox').each(function() { 処理 });   │
│       $(this).next().next().find(':checkbox').each(function() { 処理 });   │
│$(this).next().next().next().find(':checkbox').each(function() { 処理 });   │
└──────────────────────────────────────┘
分類:jQuery、【未解決】
Smarty/一覧を横に並べる
2012年06月16日
テーブルを四行毎に改行して、二列に並べたい場合の例は以下のとおり。
┌──────────────────────────────────────┐
│{section name=列 start=1 loop=2+1}                                          │
│{if ($配列|@count) > (($smarty.section.列.index - 1) * 4)}                  │
│                                                                            │
│<table>                                                                     │
│                                                                            │
│{foreach name=データ from=$配列 key=KEY item=VALUE}                         │
│{if ($smarty.foreach.データ.index <  ($smarty.section.列.index       * 4))  │
│ && ($smarty.foreach.データ.index >= (($smarty.section.列.index - 1) * 4))} │
│                                                                            │
│<tr>…</tr>                                                                 │
│                                                                            │
│{/if}                                                                       │
│{/foreach}                                                                  │
│                                                                            │
│</table>                                                                    │
│                                                                            │
│{/if}                                                                       │
│{/section}                                                                  │
└──────────────────────────────────────┘
もう少し改善したいものだ。
分類:Smarty、【未解決】
PostgreSQL/一定期間の配列を求める
2012年06月15日
例えば、本日の11:30から12:29までの「年月日時分(yyyymmddhhii)」の文字列を
配列で求めたい場合、どうすればよいか。

「generate_series()」という配列を生成する便利な関数があるので、
以下のように編集してあげればよい。
┌──────────────────────────────────────┐
│SELECT to_char(current_date, 'yyyymmdd') || CASE WHEN generate_series < 0   │
│         THEN to_char(generate_series + 60, 'FM1100')                       │
│         ELSE to_char(generate_series     , 'FM1200')                       │
│       END AS "yyyymmddhhii"                                                │
│    FROM generate_series(-30, 29, 1);                                       │
└──────────────────────────────────────┘

しかし、「generate_series()」は日時のループもできるので、直接以下でもOK。
┌──────────────────────────────────────┐
│SELECT to_char(current_date, 'yyyymmdd')                                    │
│    || to_char(generate_series, 'FMhhmi') AS "yyyymmddhhii"                 │
│    FROM generate_series(TIMESTAMP '2001-01-01 11:30:00',                   │
│                         TIMESTAMP '2001-01-01 12:29:00',                   │
│                         '1 minute')                                        │
└──────────────────────────────────────┘

で、本日の11:30から12:29までをループさせるという完成形は以下のとおり。
┌──────────────────────────────────────┐
│SELECT to_char(generate_series, 'yyyymmddhhmi') AS "yyyymmddhhii"           │
│    FROM generate_series(current_date + interval '11:30',                   │
│                         current_date + interval '12:29',                   │
│                         interval '00:01')                                  │
└──────────────────────────────────────┘
これは便利。
分類:PostgreSQL
前へ 1 … 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 … 156 次へ