PHP が CSV データを mysql データベースにインポートする_PHP チュートリアル

WBOY
リリース: 2016-07-20 11:06:56
オリジナル
817 人が閲覧しました

クラスインポート{

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);

//外部ヘッダー ファイルを使用している場合は、簡略化のために、読み取りデータの先頭にヘッダーを追加します...

if($this-> ;use_external_csv_header_file){

$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' ";

if($x<$num){

//フィールド名をキャプチャ
$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&gt ;");<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."
";
echo "".$re."";
}
$this->ascii_out = $re;
return($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()."
";
}
$ r .= "|".$val;
if(strlen($val)<= $this->biggest[$key]){
for($x=strlen($val);$x < $ this->biggest[$key]; $x++){
$r.=" ";
}
}
$r.="|n";
}
}
$r.=$this- >divider."n";
return($r); 

}

function get_divider(){

return($this->divider);
}

function display($stuff){
//constructor function
$this->widths = $this->> Calculate_widths($stuff);
}

function set_borderwidth($wid){

$this->borderwidth = $wid;
}

function set_cellpadding($pad){

$this->cellpadding=$pad;
}

function set_cellspacing($spac){
$this->cellspacing=$spac;
}

function set_bordercolor($col){

$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 = "n ".$row;
$row .= "n $row = str_replace("+", "", $row);
$row = str_replace("| ", "gt;", $row);
$row = str_replace("", "", $row); //空白を削除します
$row = str_replace("", "", $row); //空白を削除します
$htmloutput.=$row;
}
$x++;
}

$style = $this->stylesheet;
$htmloutput = $style."n

n ".$htmloutput."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();
*/


?>


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445004.html技術記事 class Import{ var $csv_fields=array(); // CSV 内の注目すべきフィールド... var $csv_file; // 開くファイル var $csv_data; //ファイル内のデータ var $csv_array = array(); // ファイル内のデータの配列...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!