dポイントプレゼントキャンペーン実施中!

for( $i = 0; $i < sizeof( $Data ); $i++ ) {
$CSV = ereg_replace( "[\r\n]", "", join( ",", $Data[ $i ] ) ). "\n";
とデータをCSVに書き込み、
abcd,2009,04,30,あいうえお
efgh,2009,06,15,かきくけこ
・・・
xyz,2009,07,09,らりるれろ
となっています。このCSVの日付部分だけを、コンマ区切りでなくハイフンで結び、
abcd,2009-04-30,あいうえお
efgh,2009-06-15,かきくけこ
・・・
xyz,2009-07-09,らりるれろ
としたいのですが、どのようにすれば宜しいでしょうか?

A 回答 (5件)

>>$Dataに入れる時点で年月日をまとめておけるといいのですが


>とありますが、上記の方法に適する良い方法がありますでしょうか?

そうしないといけないわけではありません。
プログラムのほかの箇所がどうなっているか判りませんが、$Dataの年月日を個別に再利用するような場合もあるかもしれませんし。
なので、上記の件はとりあえず忘れてください。

>>単純に判りやすく
>やっておくのが、やはりベターでしょうか

私の場合はそうしています。
直感的でないコードになる場合はコメントをしっかり書くようにしています。メンテナンス性を上げるためですね。
コーディングスタイルは人それぞれなので、自分がやりやすいようにどうぞ。
    • good
    • 0
この回答へのお礼

まだ解決できたわけではありませんが、大変有意義なご示唆を感謝します。
お二人からの回答を参考に、いろいろ工夫をして行けば、正解に辿り着けるのではないかと思って、
一生懸命、取り組んでいるところです。
本当に有難うございました。

お礼日時:2009/07/11 14:18

$Dataに入れる時点で年月日をまとめておけるといいのですが...



単純に判りやすくやるなら、
$Data = array(array('abcd',2009,7,10,'あいうえお'));
$csv = "";
foreach($Data as $v){
$csv .= vsprintf("%s,%d-%d-%d,%s\n", $v);
}
とか。

itemとmemoにカンマや改行コードが入ることがある場合は別途処理が必要です。

この回答への補足

有難うございます。
ご回答を参考書を参照しながら解読している状態ですので、レスポンスがズレ気味で申し訳ありません。
実はitem はdate()で本当の(?)日付を入れ、2009,04,30,等は、それぞれ<select><option>で選択メニューで入れています。
>$Dataに入れる時点で年月日をまとめておけるといいのですが
とありますが、上記の方法に適する良い方法がありますでしょうか?
>単純に判りやすく
やっておくのが、やはりベターでしょうか?幼稚な質問で重ねて申し訳ありません。

補足日時:2009/07/10 22:48
    • good
    • 0

その場合は、


$dt = $year ."-" .$mon ."-" .$day
$Data[$i][item] = $item
$Data[$i][dt] = $dt
$Data[$i][memo] = $memo
の方が配列っぽいです。
それ以前に日付が分かれているのが気になりますが。

この回答への補足

有難うございます。
たどたどしいレスポンスで申し訳ありません。
>それ以前に日付が分かれているのが気になりますが。
とありますが、実は
item はdate()で本当の(?)日付を入れ、2009,04,30,等は、それぞれ<select><option>で選択メニューで入れているのです。ご指導の方法で週末を使ってテストしたいと思っていますが、他に、よりマッチするやり方があればご示唆頂けると有難いです・・・。

補足日時:2009/07/10 22:46
    • good
    • 0
この回答へのお礼

まだ解決できたわけではありませんが、大変有意義なご示唆を感謝します。お二人からの回答を参考に、いろいろ工夫をして行けば、正解に辿り着けるのではないかと思って、一生懸命、取り組んでいます。
本当に有難うございました。

お礼日時:2009/07/11 14:16

$Data配列の段階で、日付が入っている要素に対して変換をかけるのが簡単でしょうね。



$Dataの5番目の要素が日付だとして、
foreach($Data as $k=>$v){
$Data[$k][4] = str_replace(',', '-', $Data[$k][4]);
}
とかですかね。
やり方はいろいろあると思いますが、うまくいかないようならNo.1さんの言うように$Dataの配列の中身のサンプルを書いてみては?

この回答への補足

有難うございます。レスポンスが遅くなり申し訳ありません。
コンマでなくハイフンで
join( "-", $Data[ $i ] )
のようにしたら1個の繋がったレコードになってしまい(当然ですが)いろいろTryしてみたが解決出来ず、遂に質問させて頂いた次第です。
上のやり方で試してみますが、最終目標は、
5個あるコンマ区切りのデータのうち、3,4,5個目のデータをハイフンで繋げたいのです・・・・。

補足日時:2009/07/09 22:43
    • good
    • 0
この回答へのお礼

回答の補足を間違えました。
「5個あるコンマ区切りのデータのうち、2,3,4個目のデータを」です。よろしくお願い致します。

お礼日時:2009/07/09 23:00

$Dataの配列の値はどうなっていますか?

この回答への補足

レスポンスが遅くなり申し訳ありません。
$Dataは2次元配列で、
array(array($item,$year,$mon,$day,$memo)) となっています。
つまり、
$Data[0][item]
$Data[0][year]
$Data[0][mon]
$Data[0][day]
$Data[0][memo]
となっています。この内容でご質問の回答になっているでしょうか。

補足日時:2009/07/09 22:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!