下記のようなプログラムで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ランキング
-
スカラーのベクトル微分
-
forとかで連番の変数を一気に格...
-
多次元配列をソートする綺麗な...
-
配列の要素(value)に、変数を...
-
smartyのforeachの使い方
-
foreachのなかで次のキーを参照...
-
PHP 多次元配列変数のデータ受...
-
CSVデータのn番目だけの値を取...
-
$_SESSIONに二次元配列を使える...
-
3つの連想配列を交互に代入し...
-
While文を使って配列の中身を全...
-
CSVデータの行数カウントをした...
-
プルダウンメニューにDBの内容...
-
unset使用時の利点
-
配列の書き方
-
多次元配列の一次元目の最大値...
-
String だと「 ByRef引数の型が...
-
ログファイルが一定行数を超え...
-
multiple属性のPOSTを配列で受...
-
添え字が全て文字列のPHPの多次...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スカラーのベクトル微分
-
STLのvectorで作った配列をメン...
-
特定の文からメールアドレスの...
-
配列の要素(value)に、変数を...
-
読み(あ行~わ行)ごとに分け...
-
ファイルの書き込みについて教...
-
verilogで、配列の一部をタスク...
-
CArrayの要素としてCStringArra...
-
pythonのnumpyでの繰り返しでの...
-
C言語の配列をPush(追加)する...
-
php キーソート キーが重複した...
-
CArrayのソート
-
【PHP】配列のキー名の修正は可...
-
多次元配列をエンコードする関...
-
PHPは何故値渡しより参照渡しの...
-
cakephpでのトランザクション処...
-
pg_copy_fromの使い方について...
-
array_intersectで空欄を比較し...
-
濁点のソート
-
配列中のあるキー、値を取得し...
おすすめ情報