これまでのコンテンツを上書きしている間に、常にそのファイルに現在のURLを書き込んでいるというのは意味がありません。 foreach-loopのすべてのステップで、そのファイルを再度開き、その内容を消去し、そのファイルに1つのURLを書き込みます。次のステップでは、正確に同じファイルを再度開いて、再度実行します。だからこそ、そのファイルの最後のURLだけで終わるのです。あなたは、アレイ内のすべてのURLを収集し、重複を捨てた後、ディスクにユニークなものを作成する必要があります
:
$lines = file($fopen2);
$urls = array(); // <-- create empty array for the urls
foreach ($lines as $line) {
$rfi_links = explode('=', $line, 2); // <-- you need only two parts, rights?
$urls[] = $rfi_links[0]; // <-- push new URL to the array
}
// Remove duplicates from the array
$links_duplicate_removed = array_unique($urls);
// Write unique urls to the file:
file_put_contents($rfi.$file.$ext, implode(PHP_EOL, $links_duplicate_removed));
別の解決策(ずっとあなた前者の方法に触発されます)行を反復を開始する前に、一度ファイルを開くには:
$lines = file($fopen2);
$urls = array();
// Open file
$fp = fopen($rfi.$file.$ext, 'w');
foreach ($lines as $line) {
$rfi_url = explode('=', $line, 2);
// check if that url is new
if (!in_array($rfi_url[0], $urls)) {
// it is new, so add it to the array (=mark it as "already occured")
$urls[] = $rfi_url[0];
// Write new url to the file
fputs($fp, $rfi_url[0] . PHP_EOL);
}
}
// Close the file
fclose($fp);
foreachループでファイルを開き、毎回切り捨てる以外に、foreachループとファイルが書き込まれるまで重複を削除しないので、重複を含むすべてがファイルに巻き込まれます。 – Jason