如何在PHP中为数组的每个元素确定正确的sql数据类型

时间:2011-09-17 16:18:31

标签: php sql arrays preg-match sqldatatypes

我编写了一个PHP类,它从.xls电子表格中获取标题,并创建一个表格,将这些标题作为列名称。

它还从电子表格中获取每行数据并将它们放入数组中。

我想做的是确定行中每列的最佳数据类型。它主要是文本,但会有数字,例如£1,000,这需要保存为1000,而不是字符串。

需要动态完成,因为每个电子表格都有不同的列名和不同顺序的数据。

我真的不知道如何解决这个问题,我想的可能是每个循环和preg_match

非常感谢任何想法。

2 个答案:

答案 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.

我希望这会有所帮助。祝你好运。