array_filter()が理解できない人に向けて、書いてみた。
php
1<?php
2
3// $file_name = "score.txt"; /*読込ファイルの指定*/
4// $score2 = file( $file_name ); /*ファイルを全て配列に入れる*/
5$score2 = [
6 'c,1,2,3' . PHP_EOL,
7 'd,11,2,3' . PHP_EOL,
8 'e,1,2,31' . PHP_EOL,
9 'f,1,2,30' . PHP_EOL,
10];
11$score3 = []; // 削除したあとのデータが入る入れ物
12for ($i = 0; $i < count($score2); $i++) {
13 if ($score2[$i][0] !== 'd') {
14 $score3[] = $score2[$i];
15 }
16}
17var_export($score3);
ちなみに、
PHP: file - Manual
にあるように、FILE_IGNORE_NEW_LINESのオプションを指定しない限り、1行ごとの行末に改行コードがつくのが当然だから、コードで再現している。
今回たまたま'd'
1文字だったので、1文字目が'd'
だったらという判定で処理しているけど、
'd'
と'dd'
と'ddd'
の行があってこれを区別したいということであれば、
こういう書き方になる。
データの1行ずつの、最初に「,」が出現する文字位置の手前までを切り出して比較する、というやり方。
php
1<?php
2
3$score2 = [
4 'aaa,1,2,3' . PHP_EOL,
5 'bbb,11,2,3' . PHP_EOL,
6 'ccc,1,2,31' . PHP_EOL,
7 'ddd,1,2,30' . PHP_EOL,
8];
9$score3 = [];
10$word = 'ddd'; // 検索語
11for ($i = 0; $i < count($score2); $i++) {
12 if (substr($score2[$i], 0, strpos($score2[$i], ',') ) !== $word) {
13 $score3[] = $score2[$i];
14 }
15}
16var_export($score3);