Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writing Array to File in php And getting the data

Tags:

php

I have An array which looks like following after using print_r

Array ( [0] => Array ( [0] => piklu [name] => piklu ) [1] => Array ( [0] => arindam [name] => arindam ) [2] => Array ( [0] => shyamal [name] => shyamal ) [3] => Array ( [0] => arko [name] => arko ) [4] => Array ( [0] => pamela [name] => pamela ) [5] => Array ( [0] => dodo [name] => dodo ) [6] => Array ( [0] => tanmoy [name] => tanmoy ) [7] => Array ( [0] => jitu [name] => jitu ) [8] => Array ( [0] => ajgar [name] => ajgar ) ) 

Now I want to write this array direct to a file, I use the file_put_contents method, but I don't know how to get the data from the file exactly how they looks like original. Any idea to solve this?

like image 302
Sahasrangshu Guha Avatar asked Feb 14 '13 06:02

Sahasrangshu Guha


4 Answers

If this is static content, a more performant way to do this would be:

$filePath = 'path/to/file.php';

//Saving
file_put_contents($filePath, '<?php '.PHP_EOL.'return '.var_export($array, true).';');
 

//Retrieving data
$array = include $filePath;

This will also be saved in OPcode cache and can even be pre-loaded. However, if you use OPcode cache or pre-loading this will not reload between deploys.

like image 179
Pelmered Avatar answered Nov 18 '22 20:11

Pelmered


Your problem at the moment is basically that you're only able to write strings into a file. So in order to use file_put_contents you first need to convert your data to a string.

For this specific use case there is a function called serialize which converts any PHP data type into a string (except resources).

Here an example how to use this.

$string_data = serialize($array);
file_put_contents("your-file.txt", $string_data);

You probably also want to extract your data later on. Simply use unserialize to convert the string data from the file back to an array.

This is how you do it:

$string_data = file_get_contents("your-file.txt");
$array = unserialize($string_data);
like image 24
MarcDefiant Avatar answered Nov 18 '22 22:11

MarcDefiant


Here are two ways:

(1) Write a JSON representation of the array object to the file.

$arr = array( [...] );
file_put_contents( 'data.txt', json_encode( $arr ) );

Then later...

$data = file_get_contents( 'data.txt' );
$arr = json_decode( $data, true );

(2) Write a serialized representation of the array object to the file.

$arr = array( [...] );
file_put_contents( 'data.txt', serialize( $arr ) );

Then later...

$data = file_get_contents( 'data.txt' );
$arr = unserialize( $data );

I prefer JSON method, because it doesn't corrupt as easily as serialize. You can open up the data file and make edits to the contents, and it will encode/decode back without big headaches. Serialized data cannot be changed so easily or corrupted, or unserialize() won't work. Each variable is defined by type and length, and these values must be updated along with the actual change you are making.

like image 8
Patrick Moore Avatar answered Nov 18 '22 22:11

Patrick Moore


file_put_contents writes a string to a file, not an array. http://php.net/manual/en/function.file-put-contents.php

If you'd like to write what you see there in that print_r to a file, you can try this:

ob_start();
print_r($myarray);
$output = ob_get_clean();
file_put_contents("myfile.txt",$output);
like image 4
Sites Done Right Avatar answered Nov 18 '22 22:11

Sites Done Right