53件中 11-15件目     [ 1 2 3 4 5 6 7 8 9 10 ... ]

PHPでタグクラウドを作るならPEARのHTML_TagCloudを使うのが便利なのだが、今回、タグクラウドのようなものを作ることになったため、これは使えなかった。 私がほしかったのは、以下のようにキーワードとカウントを渡すとカウントに応じて0.0~1.0までの値を返してくれるものだった。

Array           
(
	[word1] => 7
	[word2] => 16
	[word3] => 123
	[word4] => 89
	[word5] => 28
)
Array
(
	[word1] => 0
	[word2] => 0.0775862068966
	[word3] => 1
	[word4] => 0.706896551724
	[word5] => 0.181034482759
)

これを作るのはそれほど難しくはないが、問題はタグのサイズにあたる0.0~1.0の値をどう計算するかということだ。


PHPでHTMLをパースするには、PECL::Tidyを使う方法やDOM拡張モジュールを使う方法、「HTMLを整形式のXML文書に修正するPHPクラス : Under Construction, Baby」で配布されているようなライブラリなどを使う方法などがある。 この中でDOM拡張モジュールは、PHP5からPHPコアに含まれているため他の方法に比べて利用しやすい。


HTMLでは「あいうえお」という文字列を「あいうえお」というように数値で表すことができる。 これを数値文字参照という。

日本語文字列を数値文字参照に変換したり、逆に数値文字参照を文字に変換する場合、自力で実装しようとすると、文字エンコードを調べ全ての文字を対応する値に変換するというかなりめんどうな処理を書くことになる。


問題:以下のコードを実行した結果はどうなるでしょう?

<?php
$array[0] = 1;
$array[1] = 2;
$array[2] = 3;

$ref = &$array[1];	//参照渡し

$copy = $array;	//値渡し
$copy[0] = 'a';
$copy[1] = 'b';
$copy[2] = 'c';

print_r($array);	//←この出力は?
?>

指定したユーザ関数を呼び出すcall_user_func関数では、参照を引数に持つ関数を呼んでもうまく参照を渡すことができない。 例えば、以下の出力結果は"string"となる。

<?php
//引数を"文字列"に書き換える関数
function rewrite(&$str){
	$str = '文字列';
}

$str = 'string';
call_user_func('rewrite', $str);	//←$strは変更されない
echo $str;	//"string"を出力
?>

53件中 11-15件目     [ 1 2 3 4 5 6 7 8 9 10 ... ]