Должен ли я использовать сложный многомерный массив или создать объект? - PullRequest
0 голосов
/ 11 ноября 2011

Я пишу скрипт для импорта 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 ]

1 голос
/ 11 ноября 2011

Я думаю, вы должны использовать классы, а не только один большой объект. Может быть, вы разделили его на 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

}
0 голосов
/ 11 ноября 2011

если у вас есть ограниченное количество файлов, которые вы хотите вставить, вы можете использовать внутренние функции MySql.Чтобы импортировать файл данных, сначала загрузите его в свой домашний каталог, чтобы файл теперь находился в /importfile.csv в нашей локальной системе.Затем вы вводите следующий SQL в приглашении mysql: LOAD DATA LOCAL INFILE '/importfile.csv' INTO TABLE test_table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\ n' (field1, filed2, field3);

Приведенный выше оператор SQL сообщает серверу MySQL найти ваш INFILE в файловой системе LOCAL, прочитать каждую строку файла как отдельную строку, обработать любой символ запятой как разделитель столбцов и поместить его вMySQL test_table в виде столбцов field1, field2 и field3 соответственно.Многие из приведенных выше предложений SQL являются необязательными, и вам следует прочитать документацию MySQL о правильном использовании этого оператора.

С другой стороны, если у вас много файлов или вы хотите разрешить пользователям загружать CSV, который вызатем, в свою очередь, добавьте их в БД, я рекомендую использовать версию 'массива', поскольку кажется, что ее проще проходить.

Cheers, Denis

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...