Solved

How do I turn a txt file with multiple lines into a php array with the explode function?

Posted on 2012-03-30
7
253 Views
Last Modified: 2012-03-31
I have a form on my website that adds user inputs to a file called data.txt. Here is the php code that the form triggers:

<?php
$myFile = "data.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
$firstName = $_POST["firstName"]." ";
fwrite($fh, $firstName);
$lastName = $_POST["lastName"]." ";
fwrite($fh, $lastName);
$email = $_POST["email"]." \n";
fwrite($fh, $email);
fclose($fh);?>

Open in new window


The resulting data.txt file has multiple lines like this:

John Smith jsmith@email.com
Sam Johnson sjohnson@email.com
Steve Jones sjones@email.com

I want to use some php to turn every word, separated by spaces, into an array element in $wordArray like this:

$fh = fopen("data.txt", 'r') or die("can't open file");
$wordArray = explode(" ",fgets($fh));

But the " \n" at the end of the $email variable makes it impossible for me to access the strings on the following line correctly. For example, $wordArray[3] should be "Sam" but it's not. Any idea what I'm doing wrong?
0
Comment
Question by:shampouya
  • 2
  • 2
  • 2
  • +1
7 Comments
 
LVL 3

Expert Comment

by:animecyc
ID: 37789241
http://www.php.net/manual/en/function.file.php

Using the file method you can read a file into an array line by line. From there you can separate each line similar to how your doing it. For instance:

PHP >= 5.3
array_map(function($v) { return explode(' ', $v); }, file('data.txt'));

Open in new window


PHP < 5.3
array_map(create_function('$val', 'return explode(" ", $val);'), file('data.txt'));

Open in new window


Hopefully this helps!
0
 
LVL 10

Expert Comment

by:acbxyz
ID: 37789348
The script above would create a multidimensional array. Even if this is what most want, you asked for something different.

This should do what you asked for:
$return = explode(' ', implode(' ', array_map('trim', file('data.txt'))));

Open in new window


Another advice, space is not the best separator, because it can appear in names. Something like comma or semicolon would be better. Additional, the file creating function should filter out this letter - i.e. fwrite($fh, str_replace(';', '', $_POST['firstname']) . ';');
0
 
LVL 3

Expert Comment

by:animecyc
ID: 37789389
I agree with the above comment (It looks like I overlooked the way in which he wanted to access his data), although I don't agree with the latter part of your answer. It would make more sense to account for more than just the space character. Also, we should remove the need for a delimiter to prevent issues with the heuristic. For instance the below code would be the most reliable in my opinion in this given instance.

file_put_contents('data.txt', json_encode($_POST));

Open in new window


Then for reading the data:

$data = json_decode(file_get_contents('data.txt'));

Open in new window


Although not essentially part of the answer, just thought I would throw this out there.

Happy Coding.
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
LVL 9

Expert Comment

by:rinfo
ID: 37790716
Firstly instead of writting to the file one by one build a string and add that to file as a line.
Explicitly put space before and after each of the element excluding first one  and last one .
Some thing like this.
$line = $_POST["firstName"]." ".$_POST["lastName"]." ".$_POST["email"]." \n";
and then add this line to the file
fwrite($fh, $line);

Besides its always better to use a visible delimiter like  ',' to avoid problem like your.
0
 

Author Comment

by:shampouya
ID: 37791243
acbxyz, your solution is the most understandable to me. So, can you double check that my understanding on what's going on below is correct? First, the file() function is opening the data.txt file and putting each line into an array. Then the array_map() function is applying the trim function to each element of the array we just made using file(). Then, every line is imploded, or fused together, and separated by spaces to make one long line. Then, the long line we just made is exploded into 9 different elements separated by spaces. Is my understanding correct?

$return = explode(' ', implode(' ', array_map('trim', file('data.txt'))));

btw, I will take your advice and change the spaces to semicolons.
0
 
LVL 10

Accepted Solution

by:
acbxyz earned 500 total points
ID: 37791528
You got it right. The >>array_map('trim', ...<< is to remove the new line at the end of each element.
0
 

Author Closing Comment

by:shampouya
ID: 37791778
Thanks a lot, very easy to understand explanation.
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Wordpress Security 29 49
ability to create nested list on the UI using PHP, HTML, Javascript 7 45
Filktering Alphabetically 8 32
Search Item in Table 2 23
This article demonstrates how to create a simple responsive confirmation dialog with Ok and Cancel buttons using HTML, CSS, jQuery and Promises
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
The viewer will learn the benefit of using external CSS files and the relationship between class and ID selectors. Create your external css file by saving it as style.css then set up your style tags: (CODE) Reference the nav tag and set your prop…

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question