2011-09-17 19 views
0

我寫了一個PHP類,它從.xls電子表格中獲取標題,並創建一個包含這些標題作爲列名稱的表。如何確定PHP中數組的每個元素的正確sql數據類型

它還從電子表格獲取每行數據並將它們放入數組中。

我想要做的是確定行中每列的最佳數據類型。它主要是文本,但會有數字,比如說1000英鎊,這需要保存爲1000,並且是一個整數而不是一個字符串。

它需要動態完成,因爲每個電子表格都有不同的列名和不同順序的數據。

我真的不知道該怎麼做,我想也許是每個循環和preg_match

任何想法都非常感謝。

+0

不會[變量處理函數](http://www.php.net/manual/en/ref.var.php)就夠了嗎? – Shef

回答

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. 

我希望這有助於。祝你好運。

+0

這是一個很大的幫助!肯定指出我在正確的方向,非常感謝:) –

1

我認爲你需要檢查列中的所有數據以確定是否有一些非數字值(http://ru.php.net/manual/en/function.is-numeric.php)。如果沒有數字數據,則可以使用長度適當的INT/TINYINT/MEDIUMINT類型。如果不僅有數字數據,您可以使用適當長度的CHAR/VARCHAR/BLOG/TEXT。