2009-06-27 9 views
11

Sto usando la funzione file_put_contents($file, $data); per mettere il contenuto in file, perché questi file sono creati al volo con nome di sessioni, $ data è un array multidimensionale, quando echo l'array che stampa bene ma nel file nessun contenuto viene registrato tranne la parola Arrayfile put content with array

Cosa devo fare o c'è qualche altra funzione che crea automaticamente il file e registra i dati (array)?

Grazie.

risposta

22

Si desidera serialize() l'array sulla scrittura, e unserialize() dopo la lettura del file.

$array = array('foo' => 'bar'); 
file_put_contents('foo.txt', serialize($array)); 
$array = unserialize(file_get_contents('foo.txt'))); 

Oh, e davvero non lo so ora come si echo'd l'array, ma echo array('foo' => 'bar'); sempre stampare Array.

+0

mi dispiace per aver usato il termine sbagliato, ma sto usando print_r per visualizzare il mio array – Shishant

+0

solo una nota, la tua mancanza a) sulla 2a riga – Uberfuzzy

+0

thx! aggiustato. :-) –

1

Si può serialize la matrice e quindi userialize dopo aver caricato nuovamente il file. È anche possibile codificare l'array come oggetto JSON con json_encode e scrivere in un file .json.

4

Se si vuole che sia leggibile, si potrebbe fare:

<?php 
ob_start(); 
print_r($data); 
$textualRepresentation = ob_get_contents(); 
ob_end_clean(); 

file_put_contents($file, $textualRepresentation); 
?> 
+4

$ textualRepresentation = print_r ($ dati, true); andrebbe semplicemente bene :-) –

+0

Haha ... non lo sapeva. Grazie :) –

0

È possibile impostare una funzione ricorsiva in grado di attraversare ogni membro di un array, verificare se è esso stesso un array e, in tal caso, richiamare nuovamente la funzione su questo membro e, in caso contrario, stampare il suo contenuto. Come questo:

function file_put_contents_deep($file, $data) { 
    if (is_array($data) { 
    foreach ($data as $item) { 
     if (is_array($item) { 
     file_put_contents_deep($file, $item); 
     else { 
     file_put_contents($file, $item); 
     } 
    } 
    } else { 
    file_put_contents($file, $data); 
    } 
} 
1

definetelly è possibile utilizzare la funzione var_export:

$contents = var_export($array, true); 

file_put_contents('foo.txt', "<?php\n return {$contents};\n ?>"); 
// and then use something like this to get it: 
$new_array = require('foo.txt'); 
0

Come i migliori stati di risposta, utilizzando serialize è una buona opzione. Tuttavia, è anche possibile memorizzare l'array utilizzando PHP_EOL dopo ciascun elemento dell'array e utilizzare il comando per recuperare l'array.

function file_put_array($path, $contents) 
{ 
    if (is_array($contents)) 
    { 
     foreach ($contents as $item) 
      $str .= $item.PHP_EOL; 
     file_put_contents($path, $str); 
     return true; 
    } 
    return false; 
} 

E per retreive il contenuto:

$contents = file($path, FILE_IGNORE_NEW_LINES);