0

このコードは機能しますが、PHPに関する限られた知識と一緒にハッキングしただけで、よりエレガントで効率的な方法があると確信しています。私がどのように改善できるかを指摘してくれるとしたら、それは素晴らしいことです!

したがって、次のように構造化されたCSVファイルがあります。

Code        Class     Value    Status      Date Created    Date Redeemed
========================================================================
a51f3g45    gold      50       valid       2012-08-20      
4f6a2984    silver    200      redeemed    2012-08-23      2012-08-27      
gf3eb54b    gold      150      valid       2012-08-30      

etc...

ユーザーはフォームに入力して、特定の行の[クラス]、 [値]、および[ステータス]フィールドを変更します。次のコードを組み合わせて、古い値を新しい値に置き換えました。

$file = 'codes.csv';
$old_csv_string = file_get_contents($file);

preg_match('/('.$_POST['code'].',.*,.*,.*,.*,.*)\n/',$old_csv_string,$matches);
$old_row = $matches[1];

preg_match('/'.$_POST['code'].',(.*,.*,.*),.*,.*\n/',$old_csv_string,$matches_part);
$old_row_part = $matches_part[1];

$new_row_part = $_POST['class'].",".$_POST['value'].",".$_POST['status'];
$new_row = str_replace($old_row_part,$new_row_part,$old_row);
$new_csv_string = str_replace($old_row,$new_row,$old_csv_string);
file_put_contents($file,$new_csv_string);

では、10行よりも優れたコードを実行できますか?アドバイスをいただければ幸いです:)

注:を使用してみfgetcsvましたが、2D配列内で一意のコードを見つけて、その兄弟を置き換える方法がわかりませんでした。

4

2 に答える 2

1

なぜあなたはこれをやっている ?データをSQLテーブルに保存する必要があると思います。
ユーザーがデータを更新するたびに、テーブルでそれを行います。
CSV をいつでもダウンロードできるようにする場合。your.csv が存在しない場合にのみ、.htaccess を使用して your.csv を csv_generator.php にリダイレクトします。
csv_generator.php は、存在しない場合は csv 全体を再生成し、後で使用するためにハード ドライブに保存し、ヘッダーに正しい MIME/タイプを付けて送信します (ユーザーに対して透過的です)。ユーザーは、自分が php ページをリクエストしていることに気づきません。
次に、誰かがデータを更新するたびに、ハード ドライブ上の csv を削除する必要があります (そのため、次の要求で再生成されます)。

これは、いつでも csv をオンラインでダウンロードできるようにする方法だと思います。

Google docがこれを行うことを知っていますか?ユーザーは、URL から csv としてダウンロードできるスプレッドシートのデータを変更できます (このスプレッドシートを csv ファイルとして公開する必要があります)。

于 2012-08-30T23:58:35.690 に答える
1

各行にそのような分割を使用してみてください:

list($code, $class, $value, $status, $created, $redeemed) = split(",", $line, 6) ;

したがって、各フィールドは個別の変数になります。もちろん、ヘッダーをコピーしたくない場合に備えて、最初の行を処理する必要があります。

于 2012-08-30T23:03:09.097 に答える