2013-02-14 18 views
6

Mam tablicę, która wygląda jak następujące po użyciu print_rZapis tablicy do pliku w PHP i uzyskiwanie danych

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)) 

Teraz chcę napisać to tablica kieruje do pliku, używam metody file_put_contents, ale Nie wiem, jak uzyskać dane z pliku dokładnie jak wyglądają oryginalne. Jakiś pomysł na rozwiązanie tego?

+0

jak zapisać go do pliku? czy możesz też pokazać swój kod? –

+0

dlaczego chcesz zapisać tę tablicę do pliku? i dlaczego chcesz go odebrać z pliku? opisać swój cel pracy? – ripa

Odpowiedz

23

W tej chwili twój problem polega na tym, że możesz pisać ciągi do pliku. Aby więc użyć file_put_contents, musisz najpierw przekonwertować dane na ciąg znaków.

W tym konkretnym przypadku użycia jest funkcja o nazwie serialize, która konwertuje dowolny typ danych PHP na ciąg znaków (z wyjątkiem zasobów).

Oto przykład, jak tego użyć.

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

Prawdopodobnie również chcesz później wyodrębnić swoje dane. Po prostu użyj unserialize, aby przekształcić dane ciągu z pliku z powrotem na tablicę.

ten sposób można to zrobić:

$string_data = file_get_contents("your-file.txt"); 
$array = unserialize($string_data); 
+0

Thanx ... To spełniło mój cel dokładnie ... Bardzo dziękuję. –

4

Oto dwa sposoby:

(1) Napisz reprezentacji JSON obiektu tablicy do pliku.

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

Później ...

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

(2) Napisz zserializowaną reprezentację obiektu tablicy do pliku.

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

Później ...

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

wolę metodę JSON, ponieważ nie tak łatwo jak skorumpowany serialize. Możesz otworzyć plik danych i wprowadzić zmiany w zawartości, a kodowanie/dekodowanie zostanie cofnięte bez większych problemów. Serializowane dane nie mogą zostać zmienione lub uszkodzone, a funkcja unserialize() nie będzie działać.

+0

Jedynym "problemem" z PHP i Jsonem jest prawidłowe obsłużenie tablicy. PHP nie rozróżnia między listą a hash/object (jak javascript/json), w PHP masz tylko Array.Więc prawdopodobnie chcesz, aby drugi parametr 'json_encode()' wyglądał dobrze. – MarcDefiant

0

Nie jestem pewien, ale może to coś takiego. Chcesz serializować() tablicę przy pisaniu. Umieści tablicę w teście.txt

file_put_contents('test.txt', serialize($array)); 
3

file_put_contents pisze ciąg do pliku, a nie tablicy. http://php.net/manual/en/function.file-put-contents.php

Jeśli chcesz napisać co można zobaczyć tam w tym print_r do pliku, możesz spróbować tego:

ob_start(); 
print_r($myarray); 
$output = ob_get_clean(); 
file_put_contents("myfile.txt",$output); 
+1

zamiast używać buforowania wyjściowego, spójrz na drugi parametr w print_r – MarcDefiant

+0

Dobra racja. Wiem o tym, ale pomyślałem, że został dodany w 5, wygląda na to, że został dodany w 4.3. Tak czy inaczej, nie znając wersji PHP, lepiej jest grać bezpiecznie! –

+1

Powiedziałbym, że w tym momencie większość użytkowników ma przynajmniej PHP 5.3. Myślę, że zawsze ważne jest, aby przynajmniej wspomnieć o nowych funkcjach, aby użytkownicy szybko je adoptowali i zaktualizowali swój PHP, aby język mógł poruszać się szybciej. – MarcDefiant