我寫了一個PHP類,它從.xls電子表格中獲取標題,並創建一個包含這些標題作爲列名稱的表。如何確定PHP中數組的每個元素的正確sql數據類型
它還從電子表格獲取每行數據並將它們放入數組中。
我想要做的是確定行中每列的最佳數據類型。它主要是文本,但會有數字,比如說1000英鎊,這需要保存爲1000,並且是一個整數而不是一個字符串。
它需要動態完成,因爲每個電子表格都有不同的列名和不同順序的數據。
我真的不知道該怎麼做,我想也許是每個循環和preg_match
?
任何想法都非常感謝。
我寫了一個PHP類,它從.xls電子表格中獲取標題,並創建一個包含這些標題作爲列名稱的表。如何確定PHP中數組的每個元素的正確sql數據類型
它還從電子表格獲取每行數據並將它們放入數組中。
我想要做的是確定行中每列的最佳數據類型。它主要是文本,但會有數字,比如說1000英鎊,這需要保存爲1000,並且是一個整數而不是一個字符串。
它需要動態完成,因爲每個電子表格都有不同的列名和不同順序的數據。
我真的不知道該怎麼做,我想也許是每個循環和preg_match
?
任何想法都非常感謝。
我會去做的方式是定義我想成爲多麼精確。例如,如果我找到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.
我希望這有助於。祝你好運。
這是一個很大的幫助!肯定指出我在正確的方向,非常感謝:) –
我認爲你需要檢查列中的所有數據以確定是否有一些非數字值(http://ru.php.net/manual/en/function.is-numeric.php)。如果沒有數字數據,則可以使用長度適當的INT/TINYINT/MEDIUMINT類型。如果不僅有數字數據,您可以使用適當長度的CHAR/VARCHAR/BLOG/TEXT。
不會[變量處理函數](http://www.php.net/manual/en/ref.var.php)就夠了嗎? – Shef