Reputation: 1447
I am trying to read every line of a text file into an array and have each line in a new element.
My code so far.
<?php
$file = fopen("members.txt", "r");
while (!feof($file)) {
$line_of_text = fgets($file);
$members = explode('\n', $line_of_text);
fclose($file);
?>
Upvotes: 142
Views: 324856
Reputation: 1
I would use PHP_EOL.
$dataLines = explode(PHP_EOL, $documentVariable);
Upvotes: 0
Reputation: 2935
It's just easy as that:
$lines = explode("\n", file_get_contents('foo.txt'));
file_get_contents()
- gets the whole file as string.
explode("\n")
- will split the string with the delimiter "\n"
- what is ASCII-LF escape for a newline.
But pay attention - check that the file has UNIX-Line endings.
If "\n"
will not work properly you have another coding of newline and you can try "\r\n"
, "\r"
or "\025"
Upvotes: 13
Reputation: 8575
This has been covered here quite well, but if you REALLY need even better performance than anything listed here, you can use this approach that uses strtok
.
$Names_Keys = [];
$Name = strtok(file_get_contents($file), "\n");
while ($Name !== false) {
$Names_Keys[$Name] = 0;
$Name = strtok("\n");
}
Note, this assumes your file is saved with \n
as the newline character (you can update that as need be), and it also stores the words/names/lines as the array keys instead of the values, so that you can use it as a lookup table, allowing the use of isset
(much, much faster), instead of in_array
.
Upvotes: 0
Reputation: 914
$yourArray = file("pathToFile.txt", FILE_IGNORE_NEW_LINES);
FILE_IGNORE_NEW_LINES
avoid to add newline at the end of each array element
You can also use FILE_SKIP_EMPTY_LINES
to Skip empty lines
reference here
Upvotes: 31
Reputation: 29
$file = file("links.txt");
print_r($file);
This will be accept the txt file as array. So write anything to the links.txt file (use one line for one element) after, run this page :) your array will be $file
Upvotes: 1
Reputation: 101
$file = __DIR__."/file1.txt";
$f = fopen($file, "r");
$array1 = array();
while ( $line = fgets($f, 1000) )
{
$nl = mb_strtolower($line,'UTF-8');
$array1[] = $nl;
}
print_r($array);
Upvotes: 3
Reputation: 529
Just use this:
$array = explode("\n", file_get_contents('file.txt'));
Upvotes: 41
Reputation: 935
The fastest way that I've found is:
// Open the file
$fp = @fopen($filename, 'r');
// Add each line to an array
if ($fp) {
$array = explode("\n", fread($fp, filesize($filename)));
}
where $filename is going to be the path & name of your file, eg. ../filename.txt.
Depending how you've set up your text file, you'll have might have to play around with the \n bit.
Upvotes: 48
Reputation: 204
You were on the right track, but there were some problems with the code you posted. First of all, there was no closing bracket for the while loop. Secondly, $line_of_text would be overwritten with every loop iteration, which is fixed by changing the = to a .= in the loop. Third, you're exploding the literal characters '\n' and not an actual newline; in PHP, single quotes will denote literal characters, but double quotes will actually interpret escaped characters and variables.
<?php
$file = fopen("members.txt", "r");
$i = 0;
while (!feof($file)) {
$line_of_text .= fgets($file);
}
$members = explode("\n", $line_of_text);
fclose($file);
print_r($members);
?>
Upvotes: 1
Reputation: 53636
If you don't need any special processing, this should do what you're looking for
$lines = file($filename, FILE_IGNORE_NEW_LINES);
Upvotes: 430
Reputation: 76995
$lines = array();
while (($line = fgets($file)) !== false)
array_push($lines, $line);
Obviously, you'll need to create a file handle first and store it in $file
.
Upvotes: 7
Reputation: 28775
<?php
$file = fopen("members.txt", "r");
$members = array();
while (!feof($file)) {
$members[] = fgets($file);
}
fclose($file);
var_dump($members);
?>
Upvotes: 22