_onichannn

【PHP】array_diff()の挙動まとめ。

めも。

array_diffは与えた配列全てにおいてプライマリーな値を返却するのではなく、あくまでも第1引数に与えた配列内に存在している値のみを返却するという点に注意。
たとえば下記のような処理を行った場合、結果は以下の通りとなる。

$a = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$b = array(6, 7, 8, 9, 10, 11, 12, 13, 14, 15);

$c = array_diff($a, $b);

↓

array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
}

ここで期待していた結果は両配列の差分である「1,2,3,4,5」に「11,12,13,14,15」を加えたものであったが、どうやら第一引数が所有している値のみを返却する模様。array_diff()を用いた後に、array_intersect()などで、どちらか一方の配列に含まれていることを保証させるような処理を書く必要がないことを今更ながら学んだ。

今回の件はむしろこの挙動であってくれたほうが都合が良かったが、今後嵌りそうなTIPSとして覚えておこう。

 

【jQuery】ファイルツリーを生成するjQueryプラグイン。

またもや良さげなやーつー発見。

dynatree

かなり豊富なAPIとメソッドを持っているため、出来ないことはほぼない。自分的にはAjaxを用いた遅延読み込みが出来ればおなか一杯大満足である。

ドキュメントは下記URLを参照。

http://wwwendt.de/tech/dynatree/doc/dynatree-doc.html

案の定いきなりドキュメントを読み始めても途方に暮れたので、念のため雛形をメモ。

■HTML

<div id="tree"></div>

■Javascript

$("#tree").dynatree({
	// 初回読み込み時のファイルツリー読込メソッド
	initAjax: {
		url: '/path/to/parentNode.json'
	},
	// isLazyが有効なノードが展開された際に実行
	onLazyRead: function(node) {
		node.appendAjax({
			url: /path/to/childrenNode.json,
		});
	},
	// ノードが選択した際に実行
	onActivate: function(node) {
		console.log(node.getKeyPath());
	},
});

読込先のノードに指定したURLは下記のようなJSON配列を返すように記述しておけばおk。

[
{"title" : "fileName", "isLazy" : false, "key" : "hogehoge"},
{"title" : "FolderName", "isFolder" : true, "isLazy" : true, "key" : "piyopiyo"}
]

node.getKeyPath()は各ノードに登録されたキーパスを取得してくれるメソッド。

これだけ書けてれば基本的なファイルツリーの実装には困らないはず。
更なる詳細は公式ドキュメントを参照されたし。

 

【Javascript】textareaをコードエディタにするJSライブラリ。

いいものみつけたのでメモ。

http://codemirror.net/

ちょっといじくってみたけど設定やAPIも豊富でかなり便利な印象。

上記のURLから最新のソースをダウンロードして、ファイルを展開。

libの内容を全て読み込み、themeの中から好きなテーマを選択、そしてmodeの中から適用させたいプログラミング言語を選択してよみこみめば準備は完了。

あとは下記のように実行すれば良い。

■HTML

<textarea id="editor"></textarea>

■Javascript

CodeMirror.fromTextArea(document.getElementById('editor'), {
    mode: 'application/x-httpd-php',
    theme: 'lesser-dark',
    indentUnit: 4,
    indentWithTabs: false,
    tabMode: 'shift',
    enterMode: 'keep',
    electricChars: false,
    lineNumbers: true,
    firstLineNumber: 1,
    gutter: false,
    fixedGutter:false,
    matchBrackets: true
});

更なる細かいオプションなどは公式ドキュメントを参照されたし。

ちなみにGithubのリポジトリは以下。

https://github.com/marijnh/codemirror

 

【CakePHP】モデルでSQLを直接実行する。

めも。

特殊なSQLをフレームワーク側に組み立てさせるのがめんどくさい場合とかあるよね。

Model::query()メソッドを用いる。

モデルクラスにて。

$sql = '任意のSQL';
$res = $this->query($sql);

まぁモデルのメソッドを使って生成出来ないSQLは滅多に存在しないのでなるべくなら規則に従ったほうが良い。

 

【MySQL】特定列の合計(SUM)を求める。

めも。

SELECT SUM([列名]) FROM [テーブル名];

例。

SELECT SUM(count) FROM logs;

 

【CentOS】ターミナルでバックスペースする方法。

入力ミスの際バックスペースを打ちたいのに「^H」となってしまい文字列を消せない場面があるのでどうにかならないかと調べてみた。

少しぐぐるとどこかのフォーラムに下記のような記述を発見。

In the terminal, type Ctrl + v and press your backspace. You’ll see what code is sent as “erase”. Say it is ^H.

ということでターミナル上で文字を消したい場合は「Ctrl + v + backspace」を押せばいいらしい。

これはまれに見る大発見。めちゃくちゃ便利。

 

【CSS】textareaのリサイズを禁止する。

めも。

/* リサイズを禁止する */
textarea {
  resize: none;
}

/* 縦幅のリサイズを禁止する */
textarea {
  resize: horizontal;
}

/* 横幅のリサイズを禁止する */
textarea {
  resize: vertical;
}

 

【jQuery】要素の幅取得系関数まとめ。

自分用。

■width()

padding、含まない
border-width、含まない
margin、含まない

■innerWidth()

padding、含む
border-width、含まない
margin、含まない

■outerWidth()

padding、含む
border-width、含む
margin、含まない

■outerWidth(true)

padding、含む
border-width、含む
margin、含む

 

height()系に関しても上記と同様。