139 votes

Lire chaque ligne du fichier txt dans un nouvel élément de tableau

J'essaie de lire chaque ligne d'un fichier texte dans un tableau et de placer chaque ligne dans un nouvel élément.
Mon code jusqu'à présent.

<?php
$file = fopen("members.txt", "r");
while (!feof($file)) {

$line_of_text = fgets($file);
$members = explode('\n', $line_of_text);
fclose($file);

?>

1 votes

Y a-t-il quelque chose de stocké dans le tableau avec votre code tel qu'il est ? Quel est le problème spécifique que vous rencontrez ?

2 votes

Avertissement : FALSE de fopen émettra un avertissement et entraînera une boucle infinie ici. php.net/manuel/fr/fonction.feof.php

0 votes

Malgré la date du fil de discussion, un '\n\' ne sera pas explosé alors qu'il doit s'agir d'un "\n" pour qu'il soit interprété comme une séquence d'échappement.

425voto

Yanick Rochon Points 18537

Si vous n'avez pas besoin d'un traitement particulier, cette devrait faire ce que vous recherchez

$lines = file($filename, FILE_IGNORE_NEW_LINES);

2 votes

file() semble être considérablement plus lent que le file_get_contents + explode vers le tableau

3 votes

@Ron Je suis d'accord. Mais encore une fois, il ne faut pas lire un fichier de cette façon à chaque demande. C'est tout simplement idiot, même si la solution est optimale. Le contenu du fichier devrait être stocké dans un cache mémoire, ou même dans une base de données. Même PHP stocke le contenu des fichiers analysés. Je veux dire, nous sommes loin de PHP 4.3

44voto

La méthode la plus rapide que j'ai trouvée est la suivante :

// Open the file
$fp = @fopen($filename, 'r'); 

// Add each line to an array
if ($fp) {
   $array = explode("\n", fread($fp, filesize($filename)));
}

où $filename sera le chemin et le nom de votre fichier, par exemple ../filename.txt.

Selon la façon dont vous avez configuré votre fichier texte, vous devrez peut-être jouer avec la fonction \n bit.

5 votes

J'utiliserais "PHP_EOL" au lieu de "PHP_EOL". \n ", on dirait que $array = explode(PHP_EOL, fread($fp, filesize($filename))) ;

0 votes

Merci Drew, après avoir essayé de nombreuses fonctions, la vôtre est la seule qui ait fonctionné. Mon terme de recherche étant <br> au lieu de votre \n. Mon fichier était lu comme un seul grand tableau de valeurs, le texte entier n'était qu'un élément du tableau $myarr[0], donc le mélange ne fonctionnait pas sur un seul élément. J'espère que cela aidera quelqu'un. Merci encore.

37voto

RoLife Points 119

Il suffit d'utiliser ceci :

$array = explode("\n", file_get_contents('file.txt'));

23voto

Gaurav Points 14339
<?php
$file = fopen("members.txt", "r");
$members = array();

while (!feof($file)) {
   $members[] = fgets($file);
}

fclose($file);

var_dump($members);
?>

1 votes

D'accord, cela fonctionne parfaitement, merci. Cependant, j'ai besoin de définir une variable = à un élément de tableau. $var = $ary[1] ; ne fonctionne pas. ary[1]= "test". Si cela peut vous aider.

1 votes

Exécutez vous-même un compteur et définissez l'index dans le tableau

0 votes

7voto

Rafe Kettler Points 29389
$lines = array();
while (($line = fgets($file)) !== false)
    array_push($lines, $line);

Il est évident que vous devrez d'abord créer une poignée de fichier et la stocker dans le fichier $file .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X