Написание файла для циклов с использованием php - PullRequest
0 голосов
/ 17 марта 2012

У меня много проблем при записи файла в цикле foreach.Он либо записывает строку в конце массива, либо в начале массива.

Например:

Файл содержит такие элементы,

page.php?id=1
page.php?id=3
page.php?id=4
investor.php?id=1&la=1
page.php?id=15
page.php?id=13
page.php?id=14

Код откроет этот файл, а затем разделит каждый массив с помощью разнесения с помощью = delimiter.И вернет такие элементы

page.php?id
page.php?id
page.php?id
investor.php?id
page.php?id
page.php?id
page.php?id

, затем выберет уникальные элементы с помощью функции array_unique и сохранит их в файле.У меня есть этот код.Пожалуйста, помогите мне

 $lines = file($fopen2);
    foreach($lines as $line)
    {
    $rfi_links = explode("=",$line);
    echo $array = $rfi_links[0];
    $save1 = $rfi.$file.$txt;
    $fp=fopen("$save1","w+");
    fwrite($fp,$array);
    fclose($fp);
    }
    $links_duplicate_removed = array_unique($array);
    print_r($links_duplicate_removed);

Ответы [ 2 ]

0 голосов
/ 17 марта 2012

"w+" будет создавать новый файл при каждом открытии, стирая старое содержимое.

"a+" решает проблему, но лучше открыть файл для записи перед циклом и закрыть послеэто.

0 голосов
/ 17 марта 2012

Что не имеет смысла, так это то, что вы всегда записываете текущий URL в этот файл, перезаписывая его предыдущее содержимое. На каждом этапе цикла foreach вы снова открываете этот файл, стираете его содержимое и записываете в него один 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...