切割字串通常都是有某些特殊分隔用 split 來分隔, 而另外一種是固定長度的切割法, 就是第一欄長度是 20, 第二欄長度是 15 .. 等, 遇到這種可以使用 unpack 來切割.
簡單範例
下述範例 $str 裡面第一欄的長度是 10, 第二欄是 10, 第三欄是 9, 第四欄是 8 (算法是由字串開始算到最後面空白結束), 那 unpack 用法就如下述範例:
<?php
$str = '12/01/08 00:22:33 112233 12342222';
print_r(unpack('a10date/a10time/a9phone/a8tel', $str));
?>
輸出結果:
Array
(
[date] => 12/01/08
[time] => 00:22:33
[phone] => 112233
[tel] => 12342222
)
unpack 裡面的第一欄 format 格式, 上述用的都是 a NUL-padded string (詳細格式可見: pack), "/" 是分隔下一欄用, 所以格式寫起來是 "10個字 指定給 date 的變數 / 10個字 指定給 time 的變數 ... 等", 而因為是固定字串, 所以這些資料印出來的後面, 有可能會有空白, 可以再用 trim 去掉.
範例: 讀檔再切割
範例2: (讀檔再切割)
<?php
$handle = fopen("unpack.txt", "r");
while (!feof($handle)) {
$t = unpack("a10date/a10time/a9phone/a8tel", fgets($handle));$date = trim($t['date']);
$time = trim($t['time']);
$phone = trim($t['phone']);
$tel = trim($t['tel']);// todo something.
}
fclose($handle);
?>