くまきち

山と旅と家族が大事。
でも激しい物欲が理性と財布のタガを飛ばす
最近は自転車も乗ってる

[OS X][iTerm]全角記号の表示がおかしい(Vim, Emacs)

2013-11-19 00:32:42 | SEまわり
iTerm 上で Emacs を常用してるんだけど、全角記号(◎、★、などなど)を使うと表示が乱れる。
また、カーソルを移動させた際に、見かけ上のカーソル位置と、実際の編集位置がずれてしまう。

結果、保存したファイルを別のエディタなどで開くとおかしなことになってる。
Ctrl+Lを押して再描画をさせるとさらに乱れる。

どうにかならないものかと思ったら、意外と簡単に解決した。

iTerm のオプションひとつで良くなった。

Preference から、Profiles、Text と進み、「Treat ambiguous-width characters as double width」をオンにする。



割と長い期間困ってたのに、すぐ解決したのがちょっと悔しい。

[PHP]array_search()

2013-11-12 11:00:47 | SEまわり
array_search() 関数で不思議な現象。

$ary = array(2, 5, 8, 10);
var_dump(array_search(10, $ary));


とすると、

int(1)


が返る。期待どおり。

が、2行目を

var_dump(array_search(2, $ary));


にすると、

int(0)



が返ってきてしまう。

array の先頭要素を 3 に変えて、array_search の needle(第1引数)を 3 にしても同じく 0 (false) が返る。

haystack ( 第2引数、$ary)の先頭要素は常に false になる仕様?(-"-;)

おかしいなあと思ったのでマニュアルを調べる。

PHP マニュアルによれば、

needle が見つかった場合に配列のキー、 それ以外の場合に FALSE を返します。
もし haystack に 1 つ以上の needle に見つかった場合、 最初にマッチしたキーが返されます。全てのマッチした値に対するキーを返すためには、代わりに array_keys() にパラメータ search_value を付けて使用してください。


ってことなので、先頭要素の【キー】である 0 が返ってきてるわけか。

見つかってないってことじゃなくて、見つけたけどそのキーが 0 なもんで、「 0 == true」は成り立たない、と。

なので、「===」を使って、ちゃんと比較してあげれば良かった。


$ary = array(2, 5, 8, 10);
if ( array_search(1, $ary) === False ) { echo "NOT Found.\n"; }
else { echo "Found.\n";}


PHP のよくひっかかるところをちょうど踏んだな。