基础函数
六、数组的排序
七、数组的计算
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0061.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0072.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0072.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Main/Regular/141/0031.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Main/Regular/141/002C.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0061.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0072.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0072.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Main/Regular/141/0031.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Main/Regular/141/002C.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0061.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0072.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0072.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Main/Regular/141/0031.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Main/Regular/141/002C.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0061.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0072.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0072.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Main/Regular/141/0031.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Main/Regular/141/002C.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0061.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0072.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Math/Italic/141/0072.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Main/Regular/141/0031.png?rev=2.4-beta-2)
![](http://mathjax.b0.upaiyun.com/fonts/HTML-CSS/TeX/png/Main/Regular/141/002C.png?rev=2.4-beta-2)
八、其他的数组函数
PHP 如何获取客户端的IP地址,
用$_SERVER获取的IP地址有什么问题?
$_SERVER['REMOTE_ADDR'] ; 通过全局数组来获得
getenv('REMOTE_ADDR') ; 通过环境变量来获得
当客户机使用代理的时候获取不到真实的IP地址
写一个函数,可以遍历文件夹下的所有文件和文件夹。
1 function get_dir_info($path){ 2 $handle = opendir($path);//打开目录返回句柄 3 while(($content = readdir($handle))!== false){ 4 $new_dir = $path . DIRECTORY_SEPARATOR . $content; 5 if($content == '..' || $content == '.'){ 6 continue; 7 } 8 if(is_dir($new_dir)){ 9 echo "<br>目录:".$new_dir . '<br>'; 10 get_dir_info($new_dir); 11 }else{ 12 echo "文件:".$path.':'.$content .'<br>'; 13 } 14 } 15 } 16 get_dir_info($dir);
PHP缓存技术有哪些? tp是局部还是完全缓存?
2. 页面部分缓存,将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示
3. 数据缓存,通过一个id进行请求的数据,将数据缓存到一个php文件中,id和文件是对应的,下次通过这个id进行请求时 直接读php文件
4. 查询缓存,和数据缓存差不多,根据查询语句进行缓存;
5. 常用的缓存技术有:redis和memcache
个人认为tp应该是全局缓存 因为:tp缓存实在本地生成一个php文件来存储数据库中读取出来的数据
strlen()与mb_strlen的作用与区别
需要注意的是,mb_strlen并不是PHP核心函数,使用前需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。
1 <?php 2 function fuhuan($allnum, $ti){ 3 $arr = array(); 4 for($i = 0; $i < $allnum; $i++){ 5 $arr[$i] = $i; 6 } 7 8 $nums = 1; 9 while(count($arr) > 1){ 10 foreach ($arr as $key => $value) { 11 if($nums == $ti){ 12 unset($arr[$key]); 13 $nums = 1; 14 }else{ 15 $nums++; 16 } 17 } 18 } 19 $new_arr = array_values($arr); 20 var_dump($new_arr[0] + 1); 21 } 22 fuhuan(10,10);
isset() 、empty()与is_null的区别
1、当变量未定义时,is_null()和“参数本身”是不允许作为参数判断的,会报Notice警告错误;
2、empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 和 “参数本身”只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!
3、isset():仅当null和未定义,返回false;
4、empty():""、0、"0"、NULL、FALSE、array(),未定义,均返回false;
5、is_null():仅判断是否为null,未定义 报警告;
6、变量本身作为参数,与empty()一致,但接受未定义变量时,报警告;
1、 MVC的优点
(1) 可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。
(2) 视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。
(3) 模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。
(4) 潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。
2、 MVC的不足之处
(1) 增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
(2) 视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
(3) 视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
(4) 目前,一般高级的界面工具或构造器不支持MVC模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。
问题:程序需要定制;每次请求都进行数据库读写开销不小,另外数据库是一个单点,可以做数据库的hash来解 决这个问题。
2:使用 memcached来保存session, 这种方式跟数据库类似,内存存取性能比数据库好很多。
问题:程序需要定制,增加 了工作量;存入memcached中的数据都需要序列化,效率较低,断电或者重启电脑容易丢失数据;
3: 通过加密的cookie,在A服务器上登录,在用户的浏览器上添加加密的cookie,当用户访问B服务器时,检查有无Session,如果没有,就检验 Cookie是否有效,Cookie有效的话就在B服务器上重建session。简单,高效, 服务器的压力减小了,因为session数据不存在服务器磁盘上。根本就不会出现session读取不到的问题。
正则表达式
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$