我应该使用复杂的多维数组还是创建对象?

时间:2011-11-11 06:17:45

标签: php mysql arrays oop

我正在编写一个脚本来将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 个答案:

答案 0 :(得分:1)

我认为你应该使用Classes,而不仅仅是一个大的Object。也许你把它分成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

}

答案 1 :(得分:0)

如果您要插入的文件数量有限,则可以使用MySql的内部函数。 要导入数据文件,首先将其上传到您的主目录,以便该文件现在位于我们本地系统上的/importfile.csv中。然后在mysql提示符下键入以下SQL: LOAD DATA LOCAL INFILE'/importfile.csv'  INTO TABLE test_table  字段被','终止  由'\ n'终止的线路  (field1,filed2,field3);

上面的SQL语句告诉MySQL服务器在LOCAL文件系统上找到你的INFILE,将文件的每一行作为一个单独的行读取,将任何逗号字符视为列分隔符,并将其放入MySQL test_table中分别为field1,field2和field3。上面的许多SQL子句都是可选的,你应该阅读关于正确使用这个语句的MySQL文档。

另一方面,如果你有许多文件,或者你想让用户上传csv然后将它们添加到数据库中,我推荐使用'array'版本,因为它似乎更容易遍历。

干杯, 丹尼斯