繁体   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