【问题标题】:Should I use a complex multi-dimensional array or create an object?我应该使用复杂的多维数组还是创建一个对象?
【发布时间】:2011-12-26 18:47:03
【问题描述】:

我正在编写一个脚本来将 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,并且可能会添加更多。

我可以一次收集所有这些数据,创建适当的表,然后在第二次进行填充。

我没有使用太多面向对象的编程,但是对于所有这些数据,我是否应该考虑创建一个具有这些不同属性的对象,而不是创建这个复杂的数组?

您如何看待它的可读性、可维护性、执行速度以及您想到的任何其他考虑因素?

谢谢

【问题讨论】:

    标签: php mysql arrays oop


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果您想要插入的文件数量有限,您可以使用 MySql 的内部函数。 要导入数据文件,首先将其上传到您的主目录,以便该文件现在位于我们本地系统上的 /importfile.csv 中。然后在 mysql 提示符下键入以下 SQL: 加载数据本地文件'/importfile.csv' 进入表测试表 以“,”结尾的字段 以“\n”结尾的行 (字段 1,字段 2,字段 3);

      上面的 SQL 语句告诉 MySQL 服务器在 LOCAL 文件系统上查找您的 INFILE,将文件的每一行作为单独的行读取,将任何逗号字符视为列分隔符,并将其放入 MySQL test_table分别作为字段 1、字段 2 和字段 3 列。上述许多 SQL 子句是可选的,您应该阅读 MySQL 文档以了解如何正确使用该语句。

      另一方面,如果您有很多文件,或者您希望允许用户上传 csv,然后您又将它们添加到数据库中,我建议使用“数组”版本,因为它似乎更易于遍历。

      干杯, 丹尼斯

      【讨论】:

      • 对于这个项目,MySQL/PHP的主要功能是做一堆自动化的数据处理。每次导入都会创建一个新表,运行一系列查询和 PHP 函数,然后结果将作为新的 CSV 文件返回。我认为 LOAD DATA INFILE 仅适用于现有表,所以我仍然需要执行 csv 分析步骤(因为 MySQL 中没有内置类似的东西?)。但我想我会使用它而不是 PHP 的 fgetcsv() 来进行实际的数据加载。感谢您的意见!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      相关资源
      最近更新 更多