切割字串通常都是有某些特殊分隔用 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);
?>

 

文章轉載自 Tsung's Blog

kevin0523 發表在 痞客邦 PIXNET 留言(0) 人氣()