0

我的代码有问题。我的目标是在 txt 文件中写入数据并检索该数据。在写入数据时,我使用了一个数组。我添加了 FILE_APPEND 参数来重写文本文件。将数据写入文本文件后,我首先对其进行序列化。然后在写入数据后,我使用 file_get_contents 检索它。我也将其反序列化以以数组形式显示。

现在我的问题是。如果我添加新数据,文本文件将被覆盖,但会将我的数据显示到数组中。它将始终获得索引“0”的第一个索引。我无法获得所有序列化数组。

这是我的代码:

$data_add = array(

                array(
                    'restaurant_id' => $restaurant_id,
                    'new_lat' => $new_lat_entry,
                    'new_long' => $new_long_entry,
                    'date_updated' => date('Y-m-d H:i:s')
                )

            );


            $serialize_data = serialize($data_add);
            file_put_contents("test.txt", $serialize_data, FILE_APPEND | LOCK_EX); //write the text file

...

$array = unserialize(file_get_contents('test.txt'));

print_r($array); //display it

我的示例 .txt 文件

a:1:{i:0;a:4:{s:13:"restaurant_id";s:4:"1212";s:7:"new_lat";s:8:"14.69327";s:8:"new_long";s:9:"120.96785";s:12:"date_updated";s:19:"2013-11-14 08:34:50";}}
a:1:{i:0;a:4:{s:13:"restaurant_id";s:4:"1229";s:7:"new_lat";s:8:"14.61431";s:8:"new_long";s:9:"120.99054";s:12:"date_updated";s:19:"2013-11-14 08:35:10";}}

但我在数组中得到的是:

Array
(
    [0] => Array
        (
            [restaurant_id] => 1212
            [new_lat] => 14.69327
            [new_long] => 120.96785
            [date_updated] => 2013-11-14 08:34:50
        )

)

如何从我的数组中检索所有值?

4

2 回答 2

3

附加另一个序列化字符串不会unserialize神奇地将整个内容作为单个序列化变量读取。您需要更改代码以首先获取当前内容并对其进行反序列化,然后将当前数组与以前的数据合并,然后将其序列化并放回原处。

或者,您可以将它们放在单独的行上,然后读取并反序列化每一行,然后合并。

编辑:示例。这可行,但理想情况下,您应该在尝试添加之前检查未序列化数据的结构以确保它是闪亮的。

$data_add =  array(
  'restaurant_id' => $restaurant_id,
  'new_lat' => $new_lat_entry,
  'new_long' => $new_long_entry,
  'date_updated' => date('Y-m-d H:i:s')
);

$data = unserialize(file_get_contents('test.txt'));
$data[] = $data_add;

$serialize_data = serialize($data);
file_put_contents("test.txt", $serialize_data, LOCK_EX); //write the text file

$array = unserialize(file_get_contents('test.txt'));

echo "<pre>";
print_r($array); //display it
于 2013-11-14T00:54:37.027 回答
1

我认为您需要首先读出内容,对其进行反序列化,将内容添加到值中,然后将整个数组写回。

于 2013-11-14T00:54:37.590 回答