簡體   English   中英

我應該使用復雜的多維數組還是創建對象?

[英]Should I use a complex multi-dimensional array or create an object?

我正在編寫一個腳本,將csv導入MySQL。 CSV將具有可變數量的字段,不同的數據類型和字段大小。

我當前的計划是通過csv並收集有關它的統計信息,以通知MySQL CREATE TABLE查詢。

我的想法是用這種格式創建一個數組:

$csv_table_data = array(
  ['columns'] => array(
    [0] => array(
      ['min_size'] = int,
      ['max_size'] = int,
      ['average'] = int
      ['type'] = string
    ),
    [1] => array(
      ['min_size'] = int,
      ['max_size'] = int,
      ['average'] = int
      ['type'] = string
    ),
    [2] => array(
      ['min_size'] = int,
      ['max_size'] = int,
      ['average'] = int
      ['type'] = string
    ),
  ),
  ['some_other_data'] = array()
);

因此,通過訪問$ csv_table_data ['columns'] [$ i],我可以訪問每個列的屬性,並使用該屬性創建MySQL表。 除了$ csv_table_data ['columns']外,我還有其他數據,例如total_rows,number_of_fields,並且可能會添加更多數據。

我可以通過一次收集所有這些數據,創建適當的表,然后在第二次通過填充它。

我沒有使用太多面向對象的編程,但是我應該考慮所有這些數據來創建具有這些各種屬性的對象,而不是創建這個復雜的數組?

您在可讀性,可維護性,執行速度以及發生的任何其他考慮方面如何看待它?

謝謝

我認為您應該使用類,而不僅僅是一個大對象。 也許您將其拆分為2或3個班級。 它比數組更清潔。

像這樣

class Table{

private $data = array();
private $otherData = 'what_ever';

public function getData(){
 return $this->data;
}

public function addData(Row $row){
 $this->data[] = $row;
}

//Add getter and setter


}

class Row{

private $min_size;
private $max_size;
private $avg_size;
private $type;

public function setMinSize($minSize){
$this->min_size = $minSize;
}

public function getMinSize(){
 return $this->min_size;
}


//Add more getter and setter

}

如果您要插入的文件數量有限,則可以使用MySql的內部函數。 要導入數據文件,請先將其上傳到您的主目錄,以便該文件現在位於我們本地系統上的/importfile.csv中。 然后在mysql提示符下鍵入以下SQL:LOAD DATA LOCAL INFILE'/importfile.csv'INTO TABLE test_table FIELDS TERMINATED BY','LINES TERMINATED BY'\\ n'(field1,filed2,field3);

上面的SQL語句告訴MySQL服務器在本地文件系統上找到您的INFILE,將文件的每一行讀取為單獨的行,將任何逗號字符視為列定界符,並將其作為字段field1放入MySQL test_table中,field2和field3。 上面的許多SQL子句都是可選的,您應該閱讀MySQL文檔以正確使用此語句。

另一方面,如果您有很多文件,或者要允許用戶上傳csv,然后又將其添加到數據庫,則我建議使用“數組”版本,因為它看起來更容易遍歷。

丹尼斯干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM