MW211 EXIT

devlog
PHP配列/特定の列の調査
2014年04月08日
下記のようなSQL文で取得した複数行データのような多次元連想配列があったとして。
┌──────────────────────────────────────┐
│$多次元連想配列 = array(                                                    │
│    array(                                                                  │
│        キー   => 値,                                                       │
│        データ => 値,                                                       │
│    ),                                                                      │
│    array(                                                                  │
│        キー   => 値,                                                       │
│        データ => 値,                                                       │
│    ),                                                                      │
│);                                                                          │
└──────────────────────────────────────┘

列を縦に切り出して配列化するのは「array_column()」を使う。
┌──────────────────────────────────────┐
│キーの配列 = array_column($多次元連想配列, キー);                           │
└──────────────────────────────────────┘

これを使って、特定の列の最大値を求めることもできる。
┌──────────────────────────────────────┐
│列の最大値 = max(array_column($多次元連想配列, 列));                        │
└──────────────────────────────────────┘

といっても、「array_column()」を使えるのは「PHP5.5以降」でのこと。

「mb_strwidth()」を駆使すれば、列の最大幅を調査することもできる。
┌──────────────────────────────────────┐
│列の最大幅 = max(array_map(function($value) {return mb_strwidth($value);},  │
│                           array_column($多次元連想配列, 列)));             │
└──────────────────────────────────────┘
但し、「mb_strwidth()」にはややこしい問題があるので注意
#UTF-8では「①」が半角扱いになるなど
分類:PHP配列
JavaScript/クラスみたいなもの
2014年04月06日
クラスっぽく定義してみた。
┌──────────────────────────────────────┐
│var newJavaScript = {                                                       │
│    member  :'メンバ変数',                                                  │
│    run     :function() {                                                   │
│        this.alert();                                                       │
│    },                                                                      │
│    alert   :function() {                                                   │
│        alert(this.member);                                                 │
│    }                                                                       │
│};                                                                          │
├──────────────────────────────────────┤
│newJavaScript.run();                                                        │
└──────────────────────────────────────┘
っていうか既にオブジェクトじゃん。
分類:JavaScript
Smarty/ループインデックス
2014年04月04日
┌──────────────────────────────────────┐
│{foreach name=ループ名 from=$配列 key=no item=value}{/foreach}              │
└──────────────────────────────────────┘
上記のようなループ文の場合、ループインデックスは、
以下のような定数で取得することができる。
┌───────────────┬──────────────────────┐
│0オリジンのループインデックス │$smarty.foreach.ループ名.index      →0,1,…│
├───────────────┼──────────────────────┤
│1オリジンのループインデックス │$smarty.foreach.ループ名.iteration  →1,2,…│
└───────────────┴──────────────────────┘
なお、データ(連想配列の添字)は「key=no」で指定した「$no」で取得できる。
分類:Smarty
Excel/ファイル名を取得する関数
2014年04月03日
こんな感じ。
┌──────────────────────────────────────┐
│=MID(CELL("filename"),                                                      │
│     SEARCH("[",CELL("filename"))+1,                                        │
│     SEARCH("]",CELL("filename"))-SEARCH("[",CELL("filename"))-1)           │
└──────────────────────────────────────┘
分類:Excel
jQuery/非同期のループ
2014年04月02日
以下のような感じで、配列ごとに非同期でAjaxでデータを取得して処理をするとする。
┌──────────────────────────────────────┐
│for (var index in 配列) {                                                   │
│    $.getJSON(                                                              │
│        配列[index]['url'],                                                 │
│        function(json) {                                                    │
│            alert(配列[index]['name']);                                     │
│        }                                                                   │
│    );                                                                      │
│}                                                                           │
└──────────────────────────────────────┘
ここで、配列ごとの他の要素(「配列[index]['name']」)を、
コールバック関数で参照したい場合、上記のようにすると、
戻った頃には「index」が最後まで進んでいたりして、正しい値を取得できない。
例えば、「赤、青、黄」という三つのデータ配列だった場合、
コールバック関数中ではすべて「黄、黄、黄」となってしまう。

これを解決するには、「$.each()」を使えばよい。
┌──────────────────────────────────────┐
│$.each(配列, function(index, value) {                                       │
│    $.getJSON(                                                              │
│        value.url,                                                          │
│        function(json) {                                                    │
│            alert(value.name);                                              │
│        }                                                                   │
│    );                                                                      │
│});                                                                         │
└──────────────────────────────────────┘
PHPの「foreach (配列 as $index => $value)」のようなものだ。
#連想配列の場合「$index」の部分は「$key」の方が一般的だろう。
分類:jQuery
JavaScript/配列(添字配列)の欠番
2014年04月01日
突然、大きな添字の配列に値を代入した場合、配列はどうなるのか?

PHPだと添字配列も連想配列の一部なので、そこまでの配列は欠番となる。

では、JavaScriptの場合は?
┌──────────────────────────────────────┐
│var 配列 = [];                                                              │
│配列[2] = 値;                                                               │
│alert(配列.length);  // →「3」(0,1,2)                                      │
└──────────────────────────────────────┘
こちらの場合は、配列はあくまで添字配列なので(連想配列はハッシュで代用)、
欠番はできず、値のない配列ができる。
分類:JavaScript
前へ 1 2 次へ