私の考える動き方としては、1.csvの先頭から順番に2.csvのデータを参照しながら、3.csvのデータを置き換えていくのですが、1.csvのeは2.csvにないため、2.csvに1005,eを追加して、さらに3.csvに1005を追加するとプログラムを作りたいのです。
どうかご教授お願いいたします。
1.csv(元々あるファイル)
a
b
c
d
e
2.csv(元々あるファイル)
1001,a
1002,b
1003,c
1004,d
↓
2.csv(データが追加されたファイル)
1001,a
1002,b
1003,c
1004,d
1005,e
3.csv(新しく作るファイル)
1001
1002
1003
1004
1005
こんな感じでしょうか?
画面には何もエコーしませんが、PHPと同階層に
1.csvがあれば、初回起動時は2.csvと3.csvを作ります。
2.csvはこれまでの対応テーブルがすべて存在すると解釈して良いんですよね?
その前提で、2回目以降は2.csvには存在しないデータが1.csvに追加されたときのみ2.csvも更新します。
3.csvは1.csvの品番のみのようなので、常に上書きしています。
define( "SERIAL_BASE", 1000 );
$data1 = file( "1.csv" );
if ( ! file_exists( "2.csv" ) ) {
$fp = fopen( "2.csv", "w" );
$serial = SERIAL_BASE;
foreach( $data1 as $value ) {
fputs( $fp, ++$serial . "," . $value );
$master[ $serial ] = $value;
}
fclose( $fp );
} else {
$tempCSV = file( "2.csv" );
foreach( $tempCSV as $value ) {
$tempDATA = explode( ",", $value );
$serial = $tempDATA[ 0 ];
$master[ $serial ] = $tempDATA[ 1 ];
}
}
$masterMAX = ++$serial;
$data1 = file( "1.csv" );
foreach( $data1 as $d1 ) {
$exist = false;
foreach( $master as $key => $value ) {
if ( $value == $d1 ) {
$exist = true;
$serial = $key;
break;
}
}
if ( $exist == true ) {
$output3[] = $serial;
} else {
$output2[] = $masterMAX++ . "," . $d1;
}
}
if ( is_array( $output2 ) ) {
$fp = fopen( "2.csv", "a" );
foreach( $output2 as $value ) {
fputs( $fp, $value );
}
fclose( $fp );
}
$fp = fopen( "3.csv", "w" );
foreach( $output3 as $value ) {
fputs( $fp, $value . "\n" );
}
fclose( $fp );
?>
回答ありがとうございます!
早速動かしています。
>3.csvは1.csvの品番のみのようなので、常に上書きしています。
3.csvに品名と品番を書くにはどうすればいいでしょうか?