0

偶然見つけたもので、副作用がなければ多くの作業を節約できます。つまり、このファイルがあるとしましょう。

0
0
0

また、集計のように数字を追加する必要がありますが、文字列内の特定の文字を追加するのではなく変更する必要があります。ただし、存在しない文字を変更するのではなく、最後に追加する必要があります。インデックス..。

したがって、上記の行の1つを取得し、それにstr_splitを使用してから、番号付きインデックスを介して何かを追加しようとすると、混乱しないようです。

たとえば、そのファイルの2行目の20番目のインデックスを変更したいとします。20番目のインデックスがないため、配列の最後に要素が自動的に追加されます。

このスライドをそのままにすることはできますか、それともこれを行うのは危険ですか?副作用のように、私は気づいていません。

彼らは私が何を求めているのか理解していなかったので、私の質問のいずれかを閉じる必要があった場合は男....:P

申し訳ありませんが、他にどのように表現するかは考えられません。

ここにいくつかのコードがあります

$change_str = str_split($array_change[$list_num]);
UltraDB($change_str, "Change String BEFORE");
$change_str[20] = '5';
$array_change[$list_num] = implode('', $change_str);
foreach($array_change as $v){
file_put_contents("file.txt", $v . "\n", FILE_APPEND);
}
UltraDB($array_change, "File is now.");

UltraDBは、var_dumpエコーと改行を組み合わせたデバッグ機能です。

編集:わかりました、私の質問をより適切に表現する方法を考えました:str_splitから作成された配列にインデックスが存在しないが、その配列の特定のインデックスを追加したい場合、そのインデックスがまだ存在しない場合、それは正常ですか?代わりに、追加するものを終了インデックスに追加するだけですか?

4

2 に答える 2

0

上記は混乱を招きましたが、これがあなたが求めていることだと思います。テストされていないので、ええ...何でも...

$d=' '; //delimiter

$x=20;  //how many lines in
$y=10;  //how many values out
$z=4;   //value to insert at X/Y

$file = file('file.txt');
$tmp = explode($d, $file[$x]);

if($file[$y]) {
    $file[$y]=$z;
} else {
    $file[]=$z;
}

foreach($file as &$line){
    $line = implode($d, $line);
}

file_put_contents('file.txt', implode(PHP_EOL, $file));
于 2012-04-19T22:25:08.497 に答える
0

よくわかりませんが、行番号だけで必要な値がなくても安全に20行目を編集する方法は次のとおりです。

$file = file('file.txt');
$file[19] = $file[19]++; // the index starts with so for line 20 we take index 19

// and saving it
file_put_contents('file.txt', implode(PHP_EOL, $file));
于 2012-04-19T20:14:30.947 に答える