我编写了一个PHP类,它从.xls电子表格中获取标题,并创建一个表格,将这些标题作为列名称。
它还从电子表格中获取每行数据并将它们放入数组中。
我想做的是确定行中每列的最佳数据类型。它主要是文本,但会有数字,例如£1,000,这需要保存为1000,而不是字符串。
需要动态完成,因为每个电子表格都有不同的列名和不同顺序的数据。
我真的不知道如何解决这个问题,我想的可能是每个循环和preg_match
?
非常感谢任何想法。
答案 0 :(得分:1)
我认为您需要检查列中的所有数据,以确定是否存在某些数值(http://ru.php.net/manual/en/function.is-numeric.php)。如果没有数字数据,则可以使用具有适当长度的INT / TINYINT / MEDIUMINT类型。如果不仅有数字数据,您可以使用适当长度的CHAR / VARCHAR / BLOG / TEXT。
答案 1 :(得分:0)
我想要的方法是定义我想要的精确程度。例如,如果我找到一个带有1和0的列,我会将其定义为二进制,还是应该将其定义为整数,以防万一将来会有不同于0和1的数字。
在决定使用哪种数据类型之前,您是要解析电子表格的所有行还是仅解析顶部的几行?在上面的示例中,您可能在电子表格的顶部有0和1,但找到靠近底部的其他数字。如果您决定仅查看顶行,则可能希望对数据类型不那么严格。因此,如果只找到0和1,则可以决定将字段定义为整数,而不是二进制。这样可以减少导入数据时出错的几率。
你可以使用这样的逻辑:
for each row (and you can decide if you want to check all the rows or just a few)
if is_int() -> data field integer;
if is_float() -> data field is float;
if is_string()
if it is a date & time -> data field is datetime;
if it is a date without time -> data field is date;
else -> data field is varchar.
我希望这会有所帮助。祝你好运。