php经典实例中1.7扩展和压缩制表符
2017-09-04 22:16
375 查看
实例1-22中的tab_expand()函数容易理解,就因为没有给例子,压缩让我纠结好久
测试:
打印结果要复制放到Notepad++查看
上面是处理后的总共27个字符,下面是原版的29个字符
这样依然是对不齐的
将$tab_stop = 4;
再次运行
得到的结果:
会看到处理过的(上)已经对齐了,但是有30个字符,比原先未处理的29多了一个
书中提到的"这样不仅可以保证文本与制表位的对齐,还可以节省字符串空间"
我的理解是:如果原来不经过压缩(替换)处理的字符串要达到对齐的效果,用更多的空格对齐会比被tab_unexpand处理过后的字符串长度还要大,上述书中的原意应该是理解的
理解的误区:认为制表符在同个字符串中"长度"是不可变的(但从截图上来看是可以不一样的)
function tab_expand($text){ //echo strstr($text,"\t");exit; while(strstr($text,"\t")){ $text = preg_replace_callback('/^([^\t\n]*)(\t+)/m','tab_expand_helper',$text); } return $text; } function tab_expand_helper($matches){ $tab_stop = 8; return $matches[1].str_repeat(' ',strlen($matches[2]) * $tab_stop - (strlen($matches[1]) % $tab_stop)); } function tab_unexpand($text){ $tab_stop = 2; $lines = explode("\n",$text); foreach($lines as $i => $line){ $line = tab_expand($line); $chunks = str_split($line,$tab_stop); $chunkCount = count($chunks); for($j = 0;$j < $chunkCount - 1;$j++){ $chunks[$j] = preg_replace('/ {2,}$/',"\t",$chunks[$j]); } if($chunks[$chunkCount - 1] == str_repeat(' ',$tab_stop)){ $chunks[$chunkCount -1] = "\t"; } $lines[$i] = implode('',$chunks); } return implode("\n",$lines); }
测试:
打印结果要复制放到Notepad++查看
上面是处理后的总共27个字符,下面是原版的29个字符
这样依然是对不齐的
将$tab_stop = 4;
再次运行
得到的结果:
会看到处理过的(上)已经对齐了,但是有30个字符,比原先未处理的29多了一个
书中提到的"这样不仅可以保证文本与制表位的对齐,还可以节省字符串空间"
我的理解是:如果原来不经过压缩(替换)处理的字符串要达到对齐的效果,用更多的空格对齐会比被tab_unexpand处理过后的字符串长度还要大,上述书中的原意应该是理解的
理解的误区:认为制表符在同个字符串中"长度"是不可变的(但从截图上来看是可以不一样的)
相关文章推荐
- 安装使用php zlib扩展实现页面gzip压缩输出实例
- 安装使用php zlib扩展实现页面gzip压缩输出实例
- guetzli图片压缩php扩展
- PHP经典实例(第二版) php实例大全
- PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载
- PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
- 如何在PHP开启gzip页面压缩实例
- 如何在PHP开启gzip页面压缩实例
- PHP soap 经典实例
- php可扩展的验证类实例(可对邮件、手机号、URL等验证)
- php经典实例-笔记3-类与函数篇
- 一个经典的PHP分页实例代码分享
- php扩展类开发实例
- PHP生成压缩文件实例
- 用C开发PHP扩展 实例(基础版)
- php设计模式经典实例集合
- 《PHP 经典实例》 PHP Developer's Cookbook
- PHP封装CURL扩展类实例
- PHP实现图片压缩的两则实例