要將二進制數據寫入文件,可以使用函數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);
[包(http://php.net/manual/en/function.pack.php)? – Zimmi
如果你真的需要節省空間,爲什麼不壓縮數據呢?在這一點上可能也是如此。 – Andrew
@Zimmi是的,這正是我需要的,但是我需要爲每個單獨的值調用'pack'還是有更簡單的方法? –