下記のようなプログラムでCSVを出力する場合、
foreachの中の条件で'flag'の列が'on'だった場合、その人の名前が初めに現れる行のidを変更して出力したいのですが同じループの中でさかのぼって変更することは可能ですか?
'flag'が'on'になるのは、必ずその人の名前のなかで一番最後の行に決まっています。
名前が1行しか登場しない場合もあります。
名前が現れる最初の番号を$Pnameのように取得しておいて、それをもとに遡って編集できればと思っているのですが、☆の部分のように$editというような新たな配列を作って、別のforeachの中で出力するしかありませんか?
実際には$listの行が10000以上になるため、出来たら1回のforeachで処理したいのですが何かいい方法はありませんか?
質問がおかしかったり、解りづらかったらすみませんが、ご教示お願いいたします。
$list = array (
array('No', '名前', '年齢','flag','id'),
array('1', '田中', '18','null','null'),
array('2', '田中', '20','null','null'),
array('3', '田中', '22','on','null'),
array('4', '鈴木', '19','null','null'),
array('5', '鈴木', '14','on','null'),
array('6', '山田', '14','on','null'),
array('7', '吉田', '19','null','null'),
array('8', '吉田', '14','on','null')
);
$fo = fopen('C:\works\add.csv', 'w');
$i = 1;
foreach ($list as $fields) {
fputcsv($fo, $fields);
$Pname = $list[1];
if($Pname != $list[1]){
$line = $i;
}
$edit[] = $fields; // ☆
$i = $i +1;
}
fclose($fo);
質問者からの補足コメント
No.3ベストアンサー
- 回答日時:
$listの内容を書き換えて良いなら、
$listを全要素を検索し、flagが'on'になった時、名前の最初の要素のid
を変更します。
但し、同じ名前は連続して出現することが前提です。
$list = array (
array('No', '名前', '年齢','flag','id'),
array('1', '田中', '18','null','null'),
array('2', '田中', '20','null','null'),
array('3', '田中', '22','on','null'),
array('4', '鈴木', '19','null','null'),
array('5', '鈴木', '14','on','null'),
array('6', '山田', '14','on','null'),
array('7', '吉田', '19','null','null'),
array('8', '吉田', '14','on','null')
);
$name ="";
for ($i = 1; $i < sizeof($list);$i++){
if ($name != $list[$i][1]){
$name = $list[$i][1];
$topix = $i;
}
if ($list[$i][3] == 'on'){
$list[$topix][4] = "NEWID";
}
}
上記の処理で名前が初めに現れる行のidが"NEWID"に変更される。
以降、この内容をファイルへ出力する。
No.2
- 回答日時:
素直に走査用の foreach を事前に行いましょう
この程度の処理ならば10000程度など気にする量ではないでしょう。
$memo = array();
foreach ($list as $fields) {
_ if(フラグが立っている) $memo[名前] = true;
}
foreach ($list as $fields) {
_ if(名前が変わった && isset($memo[名前])) {
_ _ id変更($fields);
_ }
_ 出力($fields);
}
ありがとうございます。質問では関連する部分しか記載していませんでしたが実際にはその他にもいろいろ処理したいことがあるので出来たら1つのループで出来たらと思っていました。わかりづらくてすみませんでした。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スカラーのベクトル微分
-
Perlで重複行を削除したい
-
C言語 最大値と最小値を求めて...
-
C言語の配列をPush(追加)する...
-
PHPのセレクトボックスの初期値...
-
MySQLのデータをPHPで多次元...
-
構造体を動的に確保&解放
-
【PHP】チェックボックスの必須...
-
pythonのnumpyでの繰り返しでの...
-
行列
-
一度に複数の値を取得できる乱...
-
sizeof
-
Pager::factory()の使い方がわ...
-
特定の文からメールアドレスの...
-
System.String.Splitでエラー
-
PHPとMySQLで100万件のデータを...
-
Texでの数式
-
MYSQLとPHPによって取得する多...
-
PHPでDBの複数行更新について
-
配列を指定した順序でソート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スカラーのベクトル微分
-
STLのvectorで作った配列をメン...
-
特定の文からメールアドレスの...
-
配列の要素(value)に、変数を...
-
読み(あ行~わ行)ごとに分け...
-
ファイルの書き込みについて教...
-
verilogで、配列の一部をタスク...
-
CArrayの要素としてCStringArra...
-
pythonのnumpyでの繰り返しでの...
-
C言語の配列をPush(追加)する...
-
php キーソート キーが重複した...
-
CArrayのソート
-
【PHP】配列のキー名の修正は可...
-
多次元配列をエンコードする関...
-
PHPは何故値渡しより参照渡しの...
-
cakephpでのトランザクション処...
-
pg_copy_fromの使い方について...
-
array_intersectで空欄を比較し...
-
濁点のソート
-
配列中のあるキー、値を取得し...
おすすめ情報