2012年1月22日日曜日

array_merge()と演算子「+」

phpで配列を結合する関数がある。「array_merge()」だ。

よく使うパターンはこんなシーン。

$a = array_merge($a, $b);

$aと$bが連想配列なら同じことを

$a = $b+$a;

と書ける。
足し算だが「+」演算子の左右の変数を入れ替えると結果が変わってしまう。
共通のキーがあった場合に、上書きをしないからだ。

$a=array(
 'x'=>'aX',
 'y'=>'aY',
);
$b=array(
 'y'=>'bY',
 'z'=>'bZ',
);

だった場合、
$a+$b
array(
 'x'=>'aX',
 'y'=>'aY',
 'z'=>'bZ',
);
となり、
$b+$a

array(
 'x'=>'aX',
 'y'=>'bY',
 'z'=>'bZ',
);
になる

$aと$bに共通のキーがないか、共通だった場合、$aを採用するならば
$a += $b;
と書くことができる。

連想配列の変数名は長めになることが多いのでこの書き方ができればありがたいが、
ここまで短く書けるシーンにあまりであったことがないのが残念。
でもこうして整理してみると、パラメータ$aをデフォルト値$bで補完する場合に使えそうだなあ。

$a, $bが通常の整数をキーに持つ普通の配列だった場合、「+」演算子の挙動はarray_mergeの挙動と著しく違うので知らないととまどう。
array('a1','a2','a3')+array('b1','b2','b3')
の結果はどうなるか?

array('a1','a2','a3')
となる

2012年1月18日水曜日

Bloggerでコード整形を行う


Bloggerに張っているソースコードやコマンドの実行結果等が見にくいので、下記のブログを参考にデザインを変更してみた

seiji's 十八番: [SyntaxHighlighter] bloggerに整形済みテキスト、プログラムソースコードなど...

SyntaxHighlitghterは以前、ExtJSでSVNビューワを作ったときに使ったことがあったので久しぶりに使ってみた。

やることは、上記のリンクに書いてある通り。ただ、使用するブラシの種類が違っていたのでそこだけ、選択を変えた。
現在使っていないプログラミング言語はばっさり捨て、テキスト用に「Plain」をdiff用に「Diff」を追加した。「Xml」は外しかけたが、htmlを整形するために必要だった。

差し込んだコードは以下の通り。

<!--ここからsyntaxHighlighterをコピペした-->
<link type='text/css' rel='stylesheet' href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' />
<link type='text/css' rel='stylesheet' href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' />
<script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' />
<script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' />
<script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushDiff.js' />
<script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' />
<script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' />
<script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' />
<script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' />
<script type='text/javascript' src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' />
<script language='javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
</script>
ついでにメインのカラムの横幅を少し広げて表示できる桁数を増やした
-      <b:variable default='960px' name='content.width' type='length' value='860px'/>
----
+      <b:variable default='960px' name='content.width' type='length' value='1000px'/>