gpt4 book ai didi

php - 从字面上看,将二进制数据写入文件

转载 作者:可可西里 更新时间:2023-11-01 13:22:21 25 4
gpt4 key购买 nike

我有一个整数数组

Array
(
[0] => Array
(
[0] => 1531412763
[1] => 1439959339
[2] => 76
[3] => 122
[4] => 200
[5] => 4550
[6] => 444
)
...

依此类推,我想如果我将其视为数据库 - 最外层数组的元素是行,内部数组的元素是列。

我想将该信息保存到一个文件中,以便以后能够检索它,但我想将其保存为二进制数据以节省空间。基本上,如果我将示例 1531412763 中的第一个整数写入文件,它将占用 10 个字节,但如果我可以将其保存为有符号整数,它将占用 4 个字节。

我看过许多其他答案,它们都建议使用 fwrite,但我不明白如何以这种方式使用?

最佳答案

要将二进制数据写入文件,您可以使用函数 pack()unpack() 。 Pack 将产生一个二进制字符串。由于结果是一个字符串,您可以将整数连接成一个字符串。然后将此字符串作为一行写入您的文件。

通过这种方式,您可以轻松地使用 file() 进行阅读,这会将文件放入一个行数组中。然后只需 unpack() 每行,您就可以得到原始数组。

像这样:

$arr = array(
array ( 1531412763, 1439959339 ),
array ( 123, 456, 789 ),
);

$file_w = fopen('binint', 'w+');

// Creating file content : concatenation of binary strings
$bin_str = '';
foreach ($arr as $inner_array_of_int) {
foreach ($inner_array_of_int as $num) {
// Use of i format (integer). If you want to change format
// according to the value of $num, you will have to save the
// format too.
$bin_str .= pack('i', $num);
}

$bin_str .= "\n";
}

fwrite($file_w, $bin_str);
fclose($file_w);


// Now read and test. $lines_read will contain an array like the original.
$lines_read = [];
// We use file function to read the file as an array of lines.
$file_r = file('binint');

// Unpack all lines
foreach ($file_r as $line) {
// Format is i* because we may have more than 1 int in the line
// If you changed format while packing, you will have to unpack with the
// corresponding same format
$lines_read[] = unpack('i*', $line);
}

var_dump($lines_read);

关于php - 从字面上看,将二进制数据写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39851767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com