[PHP-users 12658] 配列を束ねて配列にする方法について
Masayuki AOKI
php-users@php.gr.jp
Mon, 20 Jan 2003 14:59:37 +0900
こんにちは,青木@martinです。
自作BBSで,その中に検索スクリプト(仮にSearch($tagertLog)という関数と
します)があるのですが,ログの保存形式はnon-databaseでよくある1行1ス
レッド形式で,その検索スクリプトは,配列に入ったログファイルを走査す
るように組んでます。過去ログは1ファイル100行のやつが自動的にどんどん
作られるようになっており,その過去ログファイル数は取得可能です。
この際,プログラム上,過去ログ(仮にpast1.log,past2.log,... とします)
は1つの配列に入れてしまって,検索スクリプトを走らせようと思いました。
このとき,個々のファイルは
file("past1.log") で,配列に入りますが,そのファイル数が,例えば
3つ限定なら,$line1 = file("past1.log"); とでもして,
$concatArray = array_merge($line1,$line2,$line3);
でOKですが,過去ログ数は変数(既述のようにその数は取得可能)なので,
それようのスクリプトが必要です。そこで,ぼくは以下のようにしたので
すが,何となく力技です。そこで,もっとスマートな,配列のまとめ方など
のアイデアがあればご意見お願いします。
// count($pastlogs) で過去ログのファイル数は取得できるものとする
if(count($pastlogs)==1){ // 過去ログファイル数が1個なら
$concatArray = file("past1.log");
} else { // ファイル数が2個以上のとき
$input = "";
foreach($pastlogs as $i => $value){
$end = ($i==count($pastlogs)-1) ? "" : ","; // 最後のやつはカンマなし
$input .= "file(\"".$value."\")".$end;
}
$output = "\$concatArray = array_merge(".$input.");";
eval($output); // 出来た$output式を評価,$concatArrayで連結配列取得可。
}
// これを,Search($tagetLog) に渡す。
P.S. これでワークするのはします。なお,配列をまとめずに個別に走らせれ
ば,いうのもありますが,他のスクリプトでも似たような状況があったので
お知恵を拝借できればと思った次第です。
++++++++++++++++++++++++++++++++++++++++
Department of Molecular Genetics,
Division of Molecular Population Genetics,
Medical Institute of Bioregulation,
Kyushu University, Fukuoka, Japan
Masayuki AOKI <info@maokis.com>
URL: http://www.martin.bz
++++++++++++++++++++++++++++++++++++++++