配列について勉強をしています。
データを差し替えるプログラムを考えていて色々試してみたのですが
下記のような感じでうまく機能しません。
・指定した箇所に追加書き込みになってしまう。
・指定箇所が削除され別の箇所に追加書き込みになってしう。
・まったく機能しなくなったりと困っています。
こんな感じのイメージ結果にしたいのですが・・・
--------------------------------------
dat.csvの中みが下記とします。
サンプル01
サンプル02
サンプル03
サンプル04
↓↓↓↓↓実行結果↓↓↓↓↓
サンプル01
サンプル02
サンプル05
サンプル04
--------------------------------------
ソース
--------------------------------------
外部からの呼び出しで値が「サンプル03」です。
$edit_data=$_GET["sid"];
$test = "サンプル05";
if($_POST["regist"]){
$Data=file("data.csv");
for($i=0; $i<sizeof($Data);$i++){
$line=explode(",",$Data[$i]);
if($edit_data==$line[1]){
array_splice($Data,$i,1,$test);
$fp=fopen("data.csv","w");
flock($fp, LOCK_EX);
foreach($Data as $item)fputs($fp,$item);
fclose($fp);
}
}
}
--------------------------------------
まず、外部から「サンプル03」という値を呼び出し
$edit_data==$line[1]でCSVデータと照合させました。
一致したらその箇所を「array_splice」で置換えるようにしているはずなんですが・・・
なんともうまく機能しません。。。。
どなたか、知恵を貸していただければと思い投稿させて頂きました。
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
ポイント1
$line=explode(",",$Data[$i]);
で展開された配列は[0]から始まります。
なのでデータの照合はこうなると思います。
$edit_data==$line[0]
ポイント2
サンプルのCSVは列が1つのようなので気づいたのですが、
例えば「サンプル01」は「サンプル01(改行)」がデータになっています。
なので「サンプル03」と「サンプル03(改行)」が等しくないため、
データの照合がうまくできませんでした。
読み込んだデータを
$Data[$i]=rtrim($Data[$i]);
などとして、改行をなくしておき、出力時には、
fputs($fp,$item."\n");
などとして、改行を入れてみました。
ポイント3
出力処理はループの外でよろしいかと思います。
と言うわけで参考までに私が変更したソースを載せます。
が、もっといい方法、正しい方法があるのかも知れません。
$edit_data="サンプル03";//テストのために設定
$test = "サンプル05";
$Data=file("data.csv");
for($i=0; $i<sizeof($Data);$i++){
$Data[$i]=rtrim($Data[$i]);//改行をなくす処理を追加
$line=explode(",",$Data[$i]);
if($edit_data==$line[0]){//[1]を[0]に変更
array_splice($Data,$i,1,$test);
}
}
//出力処理をループの外へ
$fp=fopen("data.csv","w");
flock($fp, LOCK_EX);
foreach($Data as $item) fputs($fp,$item."\n");//改行をつける
fclose($fp);
ありがとうございます。
アドバイスを頂いたポイントを元に組みなおしました。
意外とすんなりと修正できました。
この度は誠にありがとう御座いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- 統計学 比率に関する質問ですが 例えば 1)初めの物質Aというものの濃度は知らないが 物質Aに溶媒を3回添加 5 2023/04/02 00:27
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpでクラスのメソッドで同名の...
-
PHPとHTML+Xamppの掲示板で画像...
-
入力した部分を表示させたまま...
-
PHP8を使うと、大量のWarningが...
-
phpでcookieがうまく保存されない
-
メールフォームのタイトルが文...
-
php 完了画面の送信メールのコ...
-
クラス
-
index.phpって何ですか? 具体...
-
アマゾンのような評価の星を選...
-
in_arrayについて教えて下さい。
-
プログラムコードを入力する場...
-
phpでPEAR::DBを使っているので...
-
index.phpに入るには、どうすれ...
-
awsにApacheとPHPを入れて、何...
-
オススメのプログラミングスク...
-
PHPでのパスワード制限のセキュ...
-
これの対応OSを教えて下さい。p...
-
phpのクラスメソッドの定義が長...
-
reuterの記事をbeautiful.soup....
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数行のデータのPOST処理に関して
-
Resource id #3 と表示されま...
-
別ファイルの構造体の値を読み...
-
PHPでCSVの一部の行を編集したい
-
バイナリファイルの内容を、そ...
-
CSVファイルの最終行のデー...
-
ヒアドキュメントの中のfor文
-
stdClass Objectを連想配列のよ...
-
◆速い、ファイル読み込みは?
-
phpでCSVファイルの中身を多次...
-
C言語でCSVファイルの行数を読...
-
rubyで複数列のデータを一行に...
-
多次元配列の一次元目の最大値...
-
行数が30万件ほどあるCSVから、...
-
配列同士の足し算のループ処理
-
自動で番号を振りたい
-
csvの内容を行単位で削除したい
-
CSVデータの行数カウントをした...
-
FortranのOPEN文
-
While文を使って配列の中身を全...
おすすめ情報