for
ループの外側でインクリメントを行っており、 [0]
th 要素にのみアクセスしているため、他の場所では何も変更されていません。
これはおそらく次のようになります。
$filename = 'a.txt';
$lines = file($filename);
// $k = key, $v = value
foreach ($lines as $k=>$v) {
$exploded = explode("|", $v);
// Does this match the site name you're trying to increment?
if ($exploded[0] == "some_name_up_to_you") {
$exploded[1]++;
// To make changes to the source array,
// it must be referenced using the key.
// (If you just change $v, the source won't be updated.)
$lines[$k] = implode("|", $exploded);
}
}
// Write.
file_put_contents($filename, $lines);
ただし、おそらくこれにはデータベースを使用する必要があります。PDO と MYSQL をチェックしてみてください。
編集
コメントで言及したことを行うには、ブール値フラグを設定し、配列をウォークスルーするときにそれをトリガーできます。break
探しているものが 1 つだけの場合は、これも保証される可能性があります。
...
$found = false;
foreach ($lines as $k=>$v) {
$exploded = explode("|", $v);
if ($exploded[0] == "some_name_up_to_you") {
$found = true;
$exploded[1]++;
$lines[$k] = implode("|", $exploded);
break; // ???
}
}
if (!$found) {
$lines[] = "THE_NEW_SITE|1";
}
...