2

私はちょっと立ち往生していて、どこでこれを修正し始めるのかさえわかりません。次のような文字列にレコードを書き出すMySQLクエリがあります。

$values = mysql_query("SELECT Pointer AS Pointer, VNum AS Vnum FROM ".$table."");
$row = 0;
while ($rowr = mysql_fetch_assoc($values)) 
{
  foreach($rowr as $name => $value)
  {
      $csv_output .= $value."|";
  }
      $csv_output .= "\n";
}

これは、Vnum値が次の|ように追加されることを除いて、うまく機能します。

10467 | 66 |

Vnum値の後に区切り文字10467|66なしのように値を書き出す必要があります。|これをどのように処理しますか?

4

9 に答える 9

2

そのようなことをするとき、私は配列を作成し、次に結合を行います-それは区切り文字を最後ではなく、間にのみ配置します。

$arr = array();
foreach($rowr as $name => $value)
{
      $arr[] = $value;
}
$csv_output = join('|',$arr);
于 2013-01-24T15:52:45.160 に答える
2

配列を単純化してみませんか:

$csv_output .= implode('|', $rowr)."\n";

それはあなたに望ましい結果を与えるはずです。

mysql_*拡張機能は非推奨になっているため、新しいコードの記述には使用しないでください。調べてPDO、および/またはmysqli_*は改善されたのi略です。

完全な」 whileループは、次のようになります。

while ($rowr = mysql_fetch_assoc($values))
{
    $csv_output .= implode('|', $rowr)."\n";
}

または、データを直接csvに書き込むことができます(カスタム区切り文字を使用)。

$handle = fopen('mycsv.csv','w+');
while ($rowr = mysql_fetch_assoc($values))
{
    fputcsv($handle, $rowr, '|');
}
fclose($handle);

これで、ファイルが作成され、すべてのデータが含まれます。fputcsv関数の詳細については、ドキュメントを確認してください。

于 2013-01-24T15:53:35.323 に答える
2

使用するimplode()

$values = mysql_query("SELECT Pointer AS Pointer, VNum AS Vnum FROM ".$table."");
$row = 0;
while ($rowr = mysql_fetch_assoc($values)) {
  $csv_output .= implode('|', $rowr) . "\n";
}

また、mysql_ *関数、何とか何とかPDO何とかMySQLiの使用を停止します。

于 2013-01-24T15:54:56.943 に答える
1

PHPコードに連結がないように、直接オンにしてみませんMySQLか? 組み込み関数を使用する場合
MySQLGROUP_CONCAT

サンプルレコード、

columnName
===========
1
2
3
4
5

クエリ、

SELECT GROUP_CONCAT(columnName SEPARATOR '|') lists
FROM   TableName

結果、

Lists
=========
1|2|3|4|5
于 2013-01-24T15:59:20.927 に答える
1

どうぞ:

$csvArray = array();
foreach ($rowr as $name => $value) {
    $csvArray[] = $value;
}
$csv_output = implode('|', $csvArray);
于 2013-01-24T15:51:45.507 に答える
1

別のアプローチ:

$values = mysql_query("SELECT Pointer AS Pointer, VNum AS Vnum FROM ".$table."");
$row = 0;
$csv_output = '';
while ($rowr = mysql_fetch_assoc($values)) 
{
  foreach($rowr as $name => $value)
  {
      $csv_output .= $value."|";
  }
  $csv_output .= substr($csv_output, 0, -1) . "\n";
  // we subtract one char at the end
}
于 2013-01-24T15:54:30.863 に答える
1

印刷する$valueが最後の値であるかどうかを確認し、が最後の値でない場合にのみ文字を追加する必要があります。

while ($rowr = mysql_fetch_assoc($values)) 
{
  $last = rowr[count($rowr)-1];
  foreach($rowr as $name => $value)
  {
      $csv_output .= $value;
      if($last != $value){
          echo "|";
      }
  }
      $csv_output .= "\n";
}
于 2013-01-24T15:55:09.230 に答える
1

実際、を使用している場合foreach、ループは最後または値に達するまで続行されるNULLため、最後の文字または|を処理するには、最後の文字を削除するコードを追加する必要があります。コードを変更しました。これを試してください。

$values = mysql_query("SELECT Pointer AS Pointer, VNum AS Vnum FROM ".$table."");
$row = 0;
while ($rowr = mysql_fetch_assoc($values)) 
{
  foreach($rowr as $name => $value)
  {
      $csv_output .= $value."|";
  }
      $csv_output = substr_replace($csv_output ,"",-1); //these will remove the excess char

      $csv_output .= "\n";
}
于 2013-01-24T15:58:00.230 に答える
0

$ csv_output = rtrim($ csv_output、'|');

于 2013-01-24T15:58:28.103 に答える