1

データベース クエリを CSV にエクスポートしようとしたところ、別の小数点のコンマを使用する必要が生じました。MySQLで小数点のカンマを変更することは不可能に思えるので、PHP で試しました。

setlocale(LC_NUMERIC, "cs_CZ");

しかし、すべてのデータベース関数が好きmysql_fetch_rowで、代わりにmysql_fetch_assoc型のデータを取得しているようです:stringdouble

$res = mysql_query("select 50/3");
$row = mysql_fetch_row($res);
var_dump($row); // $row[0] is of type "string"

したがって、一般的に、PHP には既に type のデータはなくdouble、文字列しかありません!

では、小数点の出力を指定する一般的でクリーンな方法はありますか?

を使用して文字列を変換することになりましたstr_replace('.', ',', $row[0])が、これは2つの理由で醜いです:

  • どのフィールドがタイプであるかを知る必要がありますdouble
  • それはダーティ・ストリング・ジョブです。
4

3 に答える 3

3

どのデータベース クライアント/ドライバーを使用しているかはわかりませんが、0 などのオフセットに基づいてタイプを提供するmysql_field_typeDocsのようなものがあります。

これにより、特定の列を再フォーマットする必要があるかどうかを確認できます。

再フォーマットするには、number_formatDocsがあります。

これらを使用すると、自動的に変換を行うことができます。


編集:あなたのコメントについて:

PHP データ型をマップしたい場合は、MySQL Native Driver Docs の使用を検討してください。PDO と一緒に使用します。

PDO に mysqlnd を使用する利点

mysqlnd は、サーバー側のプリペアド ステートメントを使用する場合、ネイティブ データ型を返します。たとえば、INT 列は、文字列ではなく整数変数として返されます。つまり、内部でのデータ変換が少なくなります。ソース

したがって、何を達成しようとしているかに応じて、適切なツールを使用してください。

PDO Statement Docsからデータを取得する際の複数のオプションも参照してください。

于 2011-12-29T21:03:57.427 に答える
2
// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
于 2011-12-29T21:01:18.477 に答える
0

試す

number_format($row[0], 2, ",", ".");

これにより、数値の形式が変更されます。(ドイツ語形式)

于 2011-12-29T21:02:06.337 に答える