[英]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.