2011-09-17 6 views
0

.xlsスプレッドシートからヘッダーを取得し、これらのヘッダーを列名として持つテーブルを作成するPHPクラスを作成しました。PHPの配列の各要素の正しいsqlデータ型を判断する方法

また、スプレッドシートからデータの各行を取得し、配列に配置します。

私がやりたいことは、行の各列の最適なデータ型を決定することです。これは主にテキストになりますが、そこに数字があります。たとえば£1,000とすると、これは1000として保存する必要があり、文字列ではなくintでなければなりません。

各スプレッドシートは異なる順序で異なる列名とデータを持つため、動的に行う必要があります。

私はこれについてどうやって行くのか分かりません。ループごとに考えていたかもしれません。preg_match

どのようなアイデアも非常に高く評価されています。

+0

[変数処理機能](http://www.php.net/manual/en/ref.var.php)で十分ではありませんか? – Shef

答えて

0

私がそれについて行く方法は、どれくらい正確であることを定義することです。たとえば、1と0の列を見つけた場合、それを2進数として定義するか、将来的に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を使用できます。

関連する問題