クラスインポート{
var $csv_fields=array(); // CSV 内の注目すべきフィールド...
var $csv_file; //開くファイル
var $csv_data; //ファイル内のデータ
var $csv_array = array(); // ファイル内のデータの配列
var $csv_all_fields = array(); //csv ファイル内のすべてのフィールド名
var $csv_data_all = array(); //すべてのデータ
var $csv_data_keyed = array(); //すべてのデータ
var $tmp_array=array();
var $mysql_array=array();
var $table; //
に挿入するテーブル var $mysql_link; //データベース
var $instructions=array(); //SQL とデフォルト設定
var $instruct_functions = array(); //関数呼び出し
var $debug=0; // デバッグ情報を表示します - ステップバイステップのメッセージ
var $return_debug=0; // デバッグ情報をエコーする代わりに返します
var $vals_per_insert=100; //SQL の insert ステートメントごとに追加する値の数
var $format="linux";
var $linebreak_char="n";
var $delimit_char = ",";
var $use_external_csv_header_file = 0;
var $external_headers ="";
function Import(){
echo "n";
return(TRUE);
}
var $resetProgress=0;
function replace_class_state(){
$this->dmsg("クラスをリセットしています状態", 2);
$this->csv_data_all = array();
$this->csv_fields = array();
$this->csv_data_keyed = array();
$this->tmp_array = array();
$this->mysql_array = array();
$this->instructions = array();
$this->instruct_functions = array();
$this->error_messages = "" ;
$this->output_sql = "";
$this->resetProgress=1;
$this->dmsg("新しいテーブルとデータ定義の準備ができました", 2);
}
function set_delimit_char( $ch){
$this->delimit_char = $ch;
$this->dmsg("区切り文字を $ch に設定する", 2);
}
関数 debug($d=0,$r= 0){
$this->debug=$d;
$this->return_debug=$r;
}
var $y=1;
var $error_messages="";
var $debug_level = 1;
function set_debug_level($dl=1){
$this->debug_level = $dl;
}
function dmsg($string, $dlvl=1){
global $PHP_SELF;
//デバッグレベル - 1- 4 //1 はステータス メッセージのみ - 4 は完全なデバッグです
if($dlvl <= $this->debug_level){
if($this->debug){
if(!$this->return_debug ){
if($PHP_SELF){
echo "• ".$string."
n";
}else{
echo "n# $string ";
}
}else{
$this->error_messages .="# $string
n ";
}
$this->y++;
}
}
}
var $terminal_width=100;
var $queries_per_dot = 20;
関数 progress_guess(){
$calculations_to_per form = `wc -l $this ->csv_file`;
$funcs_per_row = count($this->instruct_functions);
$total_function_calls = $calculations_to_perform * $funcs_per_row;
$this->queries_per_dot =round($total_function_calls / 100);
$this- >dmsg("functions: $total_function_calls 実行される関数呼び出し - $this->queries_per_dot のドットあたりの呼び出し数", 3);
}
function set_terminal_width($w){
$this->terminal_width= $w;
}
function set_resetProgress($on=1){
$this->resetProgress=1;
}
function show_progress_meter(){
static $count=0;
static $first=1; $ticker=0;
if($this->resetProgress){
$count=0;
$first=1;
$ticker=0;
$this->リセット進行=0;
}
if($this->debug){
if($count == 0 && $first){
echo "n#";
$first=0;
}
if($count > $this- >terminal_width ){
echo "n#";
$count=0;
}
//ドットごとのクエリ
if($ticker == $this->queries_per_dot){
echo ".";
$ticker =0;
$count++;
}else{
$ticker++;
}
}
}
functionblank_error_messages(){
$this->error_messages = "";
}
function get_error_messages(){
戻る($this->error_messages);
}
function add_field_alias($csv_field, $mysql_field){
//要素を配列に追加
$this->csv_fields[$csv_field] = $mysql_field;
if( ereg( "^TMP__", $mysql_field)){
$this->dmsg("一時フィールド エイリアス $csv_field --> $mysql_field", 2);
}else{
$this->dmsg("addedフィールド エイリアス $csv_field --> $mysql_field", 2);
}
}
//read_csv_file を呼び出した後にのみこれを呼び出します。そうしないと配列が欠落します。
//また、create_csv_data_array() が呼び出された後にのみ呼び出してください。 add_field_alias の初期値の場合。
//そうでない場合、これらのフィールドは最後の配列から欠落していますが、警告は表示されません。 :(
function dedicated_field($csv_field, $mysql_field){
if(!is_array($this->mysql_array)){
echo "最初に read_csv_file($file) を実行して、必要な配列を作成します"; die();
}
reset($this->mysql_array);
while(list($key, $this->field) = each($this->mysql_array)){
$this->mysql_array[$key ][$mysql_field] = $this->csv_data_all[$key][$csv_field];
}
reset($this->mysql_array);
$this->dmsg("重複したフィールド $csv_field --> ; $mysql_field", 1);
}
function use_external_headers($headerfile){
$this->dmsg("$headerfile から外部 CSV ヘッダーを読み込みます。", 2);
if(file_exists($headerfile) )){
$fd = fopen($headerfile, "r");
$this->gt;external_headers = fread($fd, filesize($headerfile));
$this->gt;external_headers = トリム($this- >external_headers);
fclose($fd);
$this->use_external_csv_header_file = 1;
}else{
$this->dmsg("エラー - CSV ヘッダー ファイル $headerfile が存在しません!" );
die();
}
$this->dmsg("Got headers:n $this->external_headers", 2);
}
//クリーンなファイルは、カンマ引用符とアポストロフィを安全な代替文字に置き換えます -
//create_sql はエイリアスについて認識しており、最終的な SQL 出力でそれらを反転します
function clean_file($text){
$rows =explode($this->linebreak_char,$text);
$return = "";
while (list($key,$val)=each($rows)){
//カンマのアポストロフィーと引用符を置き換えます....これらはcreate_sql関数で適切な値に戻されます
$val = preg_replace("/," (.*)([,])(.*)",/", ',"1,3",', $val, -1);
$val = str_replace("""", ""e;" , $val);
$val = str_replace("'", "&appos;", $val);
$return .= $val."n";
}
return($return);
}
var $pages = array();
function find_xls_pages($file){
$command = " xlhtml -dp -asc $file";
$xls_detail = `$command`;
$this->dmsg($xls_detail) ;
}
//関数は xls ファイルを読み取り、そこから必要な配列を作成できます (xlhtml アプリケーションを使用して /tmp に csv を作成します)
関数 read_xls_file($file){
// xlhtml を使用して変換します...
$this- >dmsg("xlhtml がインストールされているかどうかを確認しています...", 3);
$xlhtml_check = `どの xlhtml 2>>/dev/null`;
if(strlen($xlhtml_check)==0){
$this- >dmsg("xls ファイルを csv2mysql に直接インポートできるようにするには、xlhtml をインストールする必要があります", 1);
die("n# Script Endedn");
}
$this->dmsg("$xlhtml_check") ;
$tmpfilename="/tmp/TMPCSV2MYSQL.CSV";
$this->find_xls_pages($file);
$command = "$xlhtml_check -csv -xp:0 $file > $tmpfilename";
$this->dmsg("実行中のコマンド $command");
exec($command);
$this->read_big_csv_file($tmpfilename);
}
var $fd;
function read_csv_file($file){
//より良い関数を呼び出します - ファイルを 1 行ずつ読み込みます
$this->read_big_csv_file($file);
}
var $buffer;
var $csvfields;
var $csv_all_possible_fields = array();
var $ csvFields = array();
function read_big_csv_file($file){
$this->dmsg("csv ファイルからデータを読み取る: $file", 1);
$this->>csv_file = $file;
if (!$this->fd=fopen($this->csv_file, "r")){
echo "CSV ファイルを開けませんnn"; die();
}
/*
$x=0;
while(!feof($this->fd)){
$this->buffer = fgets($this->fd, 4096) ;
$this->csv_data .= $this->buffer;
$x++;
}
*/
//data という配列を作成します....
while($data = fgetcsv($this->fd, 1000, $this->delimit_char)){
$num = count( $data);
$count=1;
foreach($data as $cell){
$cell = str_replace(""", ""e;", $cell);
$cell = str_replace("'", " &appos;", $cell);
$cell = str_replace(",", ",", $cell);
$this->csv_data .= $cell;
if($count < $num){
$ this-&gt; csv_data。= $ $ this-&gt; delimit_char; ->csv_data);
//クリーンなファイルは、カンマ引用符とアポストロフィーを安全な代替文字に置き換えます -
//create_sql はエイリアスを認識し、最終的な SQL 出力でそれらを反転します
//$this->csv_data = $this ->clean_file($this->csv_data);
//外部ヘッダー ファイルを使用している場合は、簡略化のために、読み取りデータの先頭にヘッダーを追加します...
$this->csv_data = $this->external_headers."n".$this->csv_data;
}
/* フィールド名の配列を作成します */
$this->csvfields =explode($this->linebreak_char, $this->csv_data);
$this->csv_all_possible_fields = $this ->csvfields[0];
//これらをカンマで分解します
$this->csvfields =explode($this->delimit_char, $this->csv_all_possible_fields);
foreach($this->csvfields as $field){
$this->csvFields[] =addslashes($field);
}
$this->dmsg("csv ファイルからのデータの読み取りが完了しました", 2);
}
var $tmp;
function set_format($format){
$this->format = $format;
if($format == "win"){
$this->linebreak_char = "rn";
$ this->tmp = "rn";
}else{
$this->linebreak_char = "n";
$this->tmp = "n";
}
//$this->dmsg( "改行形式を ".addslashes($this->linebreak_char) に設定しました);
$this->dmsg("改行形式を $this->tmp に設定しました", 2);
}
var $行;
var $stripQuotes = 1;
function setStripQuotes($on=1){
$this->stripQuotes = $on;
}
//関数は csv_data_all 配列を作成します - 値を保持する CSV フィールド名をキーにします。
関数create_csv_data_array(){
if(empty($this->csv_data)){
echo "CSV ファイル $this->csv_filen にデータがありません"; die();
}
$this->lines = array();
$this->csv_data_all = array();
$this->dmsg("データ配列の作成を開始しました", 1) ;
$this->lines =explode($this->linebreak_char, $this->csv_data);
foreach($this->lines as $line){
if(!empty($line)) {
$values =explode($this->delimit_char, $line);
//文字列を囲む「」タグを削除します...
foreach($values as $k=>$v){
if( $this->stripQuotes){
$len = strlen($v)-1;
//最初と最後の文字は引用符ですか?
$v =tripslashes($v);
if(ereg("^". +"$", $v)){
//その場合はスペースに置き換えて削除してください
//$v[0] = " ";
//$v[$len] = " ";
//$v = トリム($v);
//$v = str_replace(""", "", $v);
}
}
$v = str_replace(""", "", $ v);
//$values[$k] =addslashes($v);
$values[$k] = $v;
}
$this->csv_array[] = $values;
}
}
$this->csv_all_fields = $this->csv_array[0];
//これは CSV 定義なので 1 行目をスキップし、配列を実行します -
// のフィールド名をキーとした新しい配列を作成しますcsv と値
$count=0; を保持します。
reset($this->csv_array);
while(list($foo,$el)=each($this->gt;csv_array)){
if($count>0){
foreach($el as $ key=>$val){
$this->csv_data_keyed[$this->csv_all_fields[$key]]=$val;
}
$ this-&gt; csv_data_all [] = $ $ this-&gt; csv_data_keyed;初期データアレイ "、2);
$ this-&gt; convert_array_to_mysql_keys();
}
関数function convert_array_to_mysql_keys(){
reset($ this-&gt; csv_data_all);データ配列", 2);
//指定されたすべてのフィールドをループします - 指定されたエイリアスをキーとした新しい配列を作成します。
reset($this->csv_data_all);
while(list($foo,$data)=each ($this->csv_data_all)){
foreach($this->csv_fields as $key=>$field){
$this->tmp_array[$field] = $data[$key];
}
$this->mysql_array[] = $this->tmp_array;
}
reset($this->csv_data_all); }
var $sql;
var $result;
var $tbl_struction;
var $mysqlFields = array();
//挿入するデータベース テーブルを指定します....
function specify_table($table){
$this->table = $table;
$this->dmsg("データベーステーブル $table を見る", 2);
$this->sql = "desc $this->table";
$this->result = mysql_query($ this->sql, $this->mysql_link) または die(mysql_error());
while($rows = mysql_fetch_array($this->result, MYSQL_ASSOC)){
$this->tbl_struction[] = $行;
$this->mysqlFields[] = $rows['Field'];
}
$this->dmsg("finished looking at table $table", 2);
}
//静的エイリアスを追加します- フィールド「foobar」に常に「hello」と表示させたい場合は、 add_static_alias("foobar", "hello");これをすべての行に対して実行します
function add_static_alias($field, $value){
$this->add_db_instruction($field, $value);
}
//特定のフィールドに SQL 命令を追加します
function add_db_instruction( $field, $sql, $key=""){
$instruct['field'] = $field;
$instruct['sql'] = $sql;
$instruct['select_key'] = $key;
$this->instructions[]=$instruct;
$this->dmsg("$field の db 命令または静的エイリアスを追加しました", 2);
$this->set_resetProgress();
}
function add_function_instruction($field, $functionname, $args){
$instruct['field'] = $field;
$instruct['function_name'] = $functionname;
$instruct['args'] = $args;
$this->instruct_functions[] = $instruct;
$this->dmsg("$field の関数命令を追加", 2);
$this->set_resetProgress();
}
//実行関数命令
var $call;
function get_function_instruction_values(){
$this->gt;progress_guess();
$this->dmsg("関数命令の値の計算", 2);
reset($this->gt; mysql_array);
while(list($key,$element)=each($this->mysql_array)){
foreach($this->instruct_functions as $function){
$this->call = "$function_result = ".$function['function_name'];
//値を計算するために引数を分割します...
$args =explode(",", $function['args']);
$arg_call = "";
$num_args = count($args)-1;
$count=0;
//引数の値を取得します
foreach($args as $arg){
$arg =rim($arg) ;
$arg_call.=""".$element[$arg].""";
if($count $arg_call .= ",";
}
$count++;
}
//関数の末尾に引数の値を追加します
$this->call.="(".$arg_call.");";
//作成された関数呼び出しを評価します - 変数 function_result に戻り値が設定されます
//die ($this->call);
$this->dmsg("関数命令の実行 : $this->call", 4);
$this->show_progress_meter();
eval($this-> ;call);
//mysql_array に値を追加します
$this->mysql_array[$key][$function['field']] = $function_result;
}
}
reset($this-> mysql_array);
}
//db 命令を実行
var $product_id;
function get_instruction_values(){
$this->dmsg("db 命令の値を計算しています", 2);
reset($this- >mysql_array);
while(list($key,$element)=each($this->mysql_array)){
foreach($this->instructions as $ins){
if(eregi("SELECT", $ins['sql'])){
$ins['sql'] =tripslashes($ins['sql' ]);
$this->select_key = $ins['select_key'] ;
//まだ値を取得していない場合...
if(!isset($this->mysql_array[$key ][$ins['field']])){
$this->mysql_array[$key][$ins['field']] = $this->run_sql_query($ins['sql'], $ element[$this->select_key]);
}
}else{
$this->mysql_array[$key][$ins['field']] = $ins['sql'];
}
}
$this->show_progress_meter();
}
reset($this->mysql_array);
}
var $runsql;
var $dbrows;
var $dbkey;
//あなたが思っていることとは違います関数 -- これはコードを評価するためのものです - 命令のためのものです。
//TODO 関数の名前を、より優れた機能を反映した論理的な名前に変更します。
function run_sql_query($sql, $dbkey){
$this->runsql =tripslashes($sql);
$this->dbkey = $dbkey;
//コードを this->runsql に評価します -
//これにより、dbkey に文字列ではなく値が入力されます
eval("$this->runsql = "$this ->runsql";");
$this->dmsg("running sql query..$this->runsql", 4);
//クエリを実行して結果を返す
$this->result = mysql_query($this->runsql, $this->mysql_link) または die(mysql_error());
while($rows = mysql_fetch_array($this->result, MYSQL_ASSOC)){
$this-> ;dbrows = $rows['結果'];
$this->dmsg("$this->runsql returns: $this->dbrows", 4);
}
$this->dmsg("$this->runsql returns: $this ->dbrows", 4);
return($this->dbrows);
}
//データベースに接続します
function db_connect($host, $user, $pass, $db){
$ this->dmsg("データベースに接続中", 2);
$this->mysql_link = mysql_pconnect("$host", "$user", "$pass") または die(mysql_error());
if ($this->mysql_link){
mysql_select_db($db);
}
}
var $specified_fields=array();
var $sql_error=0;
var $error_fields = array();
//テーブルに必要なすべてのフィールドが存在し、正しいことを確認してください....
function validate_sql(){
$this->dmsg("SQL を生成する配列要素を検証しています", 1);
reset($this ->mysql_array);
//配列内の要素をステップ実行します。foo は未使用の変数です。
while(list($foo,$this->element)=each($this->mysql_array)){
//ここでは foreach を気にしないでください - 遊ぶための小さな配列...
foreach($this->element as $this->field=>$val){
//以下のフィールド名の配列を作成します指定されています...
if(!in_array($this->field, $this->specified_fields)){
$this->specified_fields[] = $this->field;
}
}
}
reset($this->mysql_array);
//エラーが発生するとこれが真になり、下のダイが生き返ります...
$this->sql_error=0;
//テーブルのフィールドをループします - 配列
foreach ($this->tbl_struct as $this->field)を作成します{
//フィールドが指定されたフィールドの配列内になく、デフォルト値がない場合
// 問題のフィールドが主キーではない場合 - moan
if(!in_array($this->field['Field '], $this->specified_fields)
&& ($this->field['Default']=="")
&& ($this->field['Key'] != 'PRI')
&& ($this->field['Extra'] != 'auto_increment')
&& ($this->field['NULL'] != "YES" ) ){
$this->dmsg( "{$this->field['Field']} にはデフォルトがなく、このフィールドの値が指定されていません。", 1);
$this->gt;sql_error=1;
$this->error_fields[] = $this->field['フィールド'];
}else{
$this->dmsg( "{$this->field['フィールド']} は", 4);
}
}
#この VAR が設定されている場合、何かエラーが発生しました - メッセージを添えて報告してください。
if($this->sql_error){
echo $this->error_messages;
$this->csv_data_all = array();
if(function_exists("render_page_head")){
echo render_page_head();
}
$erst="";
foreach($this->error_fields as $ f){
$erst.="フィールド ".$f." にはデフォルトはありません
";
}
die("n$erst 不足しているフィールドの値を指定してください。これらのフィールドの定義を追加してください。") ;
}
}} var $ element;
var $ output_sql; ){
//すべての配列要素が存在し、正しいことを確認してください...
$this->validate_sql();
$this->dmsg("creating sql", 1);
#TODO:これはあまり賢いメモリ管理ではありません - 各値行を作成しない方が良いです
# +Bでマシンを回復!!!!
$this->values = "";
//入力する各行をループします
reset($this->mysql_array); $this->all_values = array();
while(list( $foobar,$this->element)=each($this->mysql_array)){
//各フィールド名と値をループします
$num=count($this->element)-1;
$x=0;
//空白のデータ
$this->insert_into = "";
$this->values = "(";
foreach($this->element as $field=>$ val){
if(!ereg("^TMP__", $field )){
$val = str_replace(""e;", """ , $val);
$val = str_replace(",", ",", $val);
$val = str_replace("&appos;", "'", $val);
$this->insert_into .= $field." ";
$this->values .= "'$val' ";
//フィールド名をキャプチャ
$this->insert_into.=" ,";
$this->values .= ", ";
}
}
$x++;
}
$this->values .= ")";
$this->all_values[] = $これ->値;
}
//SQLの挿入行を作成します
$this->insert_line = "REPLACE INTO $this->table ( $this->insert_into ) VALUESn ";
$this->output_sql = $ this->insert_line;
$num=count($this->all_values)-1;
$x=0;
$i=1;
// VALUES のリストをループします "(bla,bla ,bla)" を配列で SQL にそれぞれ追加します
//vals_per_insert に達したら SQL ステートメントを閉じて別の挿入行を追加します
reset($this->all_values);
while(list($foo,$v)= each($this->all_values)){
//挿入ステートメントごとに指定された数の値のみを追加します (vals_per_insert)
if($i== $this->vals_per_insert){
$this->output_sql . = $v.";nn".$this->insert_line;
$i=1;
}
else{
$this->output_sql .= " $v ";
if($x $this->output_sql .= ",n";
}
}
$x++;
$i++;
}
reset($this->all_values);
reset($this->mysql_array);
// SQL ステートメントを終了します
$this->output_sql .= "; ";
if($show){
echo "n#################################### #####################n";
echo "# Csv2MySQL.1.1.inc によって作成された SQL n";
echo "# CyBeRtIlL レガシーインポートツール n";
echo "# ".date("D d-m-Y H:i:s", time())."n";
echo "# CSV ファイル: $this->csv_file n";
echo "#### ################################################ ####n";
echo "nn".$this->output_sql."n";
}
else{
return($this->output_sql);
}
}
var $keys;
//ちょっとしたデバッグ関数
function show_settings($tbl=1, $return=0){
if(!$tbl){
ds($this->mysql_array);
#BELOW ARE JUST MOREデバッグ用のオプションのダンプ
//ds($this->csv_fields);
//ds($this->csv_data_all);
//ds($this->tbl_struction);
//ds($this ->手順);
//echo nl2br($this->output_sql);
}else{
if(!$return){
#DEBUG JARGON - "知っている人向け" ;)
echo "< pre>";
$d=新しいディスプレイ($this->csv_data_all);
$d->make_layout(1);
$d=新しいディスプレイ($this->mysql_array);
$d-> ;make_layout(1);
#オプションのデバッグダンプ
//$d=新しいディスプレイ($this->手順);
//$d->make_layout(1);
//$d=新しいディスプレイ($this->instruct_functions);
//$d->make_layout(1);
//$d=new display($this->tbl_struct);
//$d->make_layout(1) );
//echo nl2br($this->output_sql);
echo "";
}else{
#関数呼び出し元にデータを返す...
//配列キーを取得します
$keys = array_keys($this->mysql_array[0]);
$this->keys = $keys;
//キーを通過します - 大きな配列から 5 行を取得します - これは、関数などの追加中にユーザーが何を行っているかをユーザーに表示するためです -
// 潜在的に数千行を消費することはありません...
foreach( $keys as $key){
$x=0;
while($x<5){
$sample[$x][$key] = $this->mysql_array[$x][$key];
$x++;
}
}
$d=新しいディスプレイ($sample);
$string = $d->make_layout(0);
return("
".$string."</pre> ;");<br /> }<br /> }<br /> }<br /></p> 関数 return_csv_fields(){<p> return($this->csvFields);<br /> }<br /> <br /> 関数 return_mysql_fields(){<br /> return($this->mysqlFields); <br /> } <br /></p> 関数 return_mysql_key_fields(){<p> //return(array_keys($this->mysql_array[0]));<br> return($this->keys);<br> }<br>}<br></p> <p></p> <p>???</p> <p>//////// クラスに渡すサンプル配列 //////////<br>/*<br>$stuff = array("0" => array(<br> "product_id" => " 00001",<br> "actual_unit_cost" => "99.99",<br> "retail_unit_cost" => "124.99",<br> "数量" => "5"<br> ),<br> "1" => array(<br> "product_id; " => "00002",<br> "actual_unit_cost" => "699.99",<br> "retail_unit_cost" => "750.00",<br> "数量" => "3" <br> )<br> );<br>*/</p> <p> <br>クラス表示 {<br> var $widths = array();<br> var $biggest = array();<br> var $data = array();<br> var $dis;<br> var $divider;<br> var $rows;<br> var $emptyset =FALSE;<br> var $write; //出力をエコーします<br> var $ascii_output;<br> var $finalhtmltable;<br> var $stylesheet;<br> <br> var $borderwidth = 0;<br> var $bordercolor = "#000000";<br> var $cellpadding = 2;<br> var $cellspacing = 1;<br> </p> <p> function Calculate_widths($array){<br> if(empty($array)){<br> //表示するデータがあることを確認してください<br> $this->emptyset=TRUE;<br> return(false);<br> }<br> //各行をループします<br> $this->data = $array;<br> $x=0;<br> if(is_array($array)){<br> foreach($array as $a){<br> while(list( $key, $val) = each($a)){ <br> $this->widths[$x][$key] = strlen($val);<br> }<br> ++$x;<br> }<br> }<br> $ this->biggest = $this->get_longest_only();<br> return($this->widths);<br> }</p> <p> function get_longest_only(){<br> $x=0;<br> $array = $this-> widths;<br> foreach($array as $a){<br> while(list($key, $val) = each($a)){ <br> if($val > $this->biggest[$key] || empty($this->biggest[$key])){ <br> $this->biggest[$key] = $val;<br> }<br> if(strlen($key) > $this->biggest[$ key]){<br> $this->biggest[$key] = strlen($key);<br> }<br> }<br> ++$x;<br> }<br> return($this->biggest);<br> } </p> <p> 関数make_layout($write=1){<br> $this->write = $write;<br> if($this->emptyset){<br> return("空のセット (0.00 ふふふ)n");<br> }<br> $first= "+"; <br> while(list($key, $val) = each($this->biggest)){</p> <p> $dis.="+";<br> for($x=0;$x<$this->biggest [$key];$x++){<br> $first .= "-";<br> }<br> $first.="+";<br> $s="|".ucwords(str_replace("_", " ",$key ));<br> if(strlen($s)<= $this->biggest[$key]){<br> for($x=strlen($s);$x<=$this->biggest[$ key];$x++){<br> $s.=" ";<br> }<br> }<br> $second.=$s;<br> }<br> $this->divider = $first;<br> $re = $first."n" .$sec."|n".$first."n";<br> $re.=$rows; </p> <p> $this->rows = $this->make_body();<br> $re.=$this->rows;<br> if($this->write){<br> //出力をウェブページに書き込みます<br> //echo "<pre class="brush:php;toolbar:false">".$re."";
function create_stylesheet($bg="ededed", $fontcol="000000", $fontsize="x-small", $bg2="444444", $fontcol2="ffffff", $fontsize2=" x-small"){
$this->stylesheet = "
";
}
function make_body(){
if(is_array($this->data)){
foreach($this->data as $row){
while(list( $key, $val)=each($row)){
if(is_array($val)){
$out[0]=$val;
$tr = 新しいディスプレイ($out);
$tr- >make_layout(0);
$tr->set_borderwidth($this->gt;borderwidth);
$tr->set_cellpadding($this->cellpadding);
$tr->set_cellspacing($this- >セル間隔);
$tr->set_bordercolor($this->bordercolor);
$val = "
".$tr->make_html_table()." |
return($this->divider);
}
function display($stuff){
//constructor function
$this->widths = $this->> Calculate_widths($stuff);
}
$this->borderwidth = $wid;
}
$this->cellpadding=$pad;
}
function set_cellspacing($spac){
$this->cellspacing=$spac;
}
$this->bordercolor=$col;
}
function make_html_table( ){
//ASCII 表示を適切な HTML テーブルに変換します
$text = $this->ascii_out;
$rows =explode("n", $text);
$x=0;
foreach($rows as $row){
$last = strlen($row);
$class = "column-data";
if($x==1){
$class = "テーブルヘッダー";
}
if(!ereg("^+-*", $row) && strlen($row)>0){
$row = "
$style = $this->stylesheet;
$htmloutput = $style."n
$this->finalhtmltable = $htmloutput;
return($htmloutput);
}
function returnhtml(){
return($this->finalhtmltable);
}
function parsehtml(){
echo $this->finalhtmltable;
}
}
//$t =新しいディスプレイ($stuff);
//$t->make_layout(0);
//echo $t->make_html_table();
/*
$d = 新しいディスプレイ($stuff);
$ d->make_layout(0);
$d->set_borderwidth(0);
$d->set_cellspacing(1);
$d->set_cellpadding(2);
$d->make_html_table( );
$d->parsehtml();
*/
?>