PHP中常用代码块集锦
来源:互联网 发布:蒙古帝国 知乎 编辑:程序博客网 时间:2024/05/09 02:14
1. 从哪个页面来,返回就到那个页面去。用到str_replace函数。
define(SINA_LOGIN_URL,'http://weibosina/');define(TX_LOGIN)URL,'http://weibotx/');$referer_from =str_replace(array(SINA_LOGIN_URL,TX_LOGIN_URL), '', $_SERVER['HTTP_REFERER']);$S->assign('return_back',$referer_from);
$_SERVER[‘HTTP_REFERER’]表示从哪个页面跳转过来的。
str_replace在这里替换成具体的那个页面比如:http://weibosina/login.php这个页面跳转走的。那么$referer_from = login.php了。
2. 获取浏览器类型
通过$_SERVER[“HTTP_USER_AGENT”]来识别:
public function index() { $browser = 'other'; if(strpos($_SERVER["HTTP_USER_AGENT"], "TheWorld") || strpos($_SERVER["HTTP_USER_AGENT"], "QIHU THEWORLD")){ $browser = 'world'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "Maxthon")){ $browser = 'aoyou'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "TencentTraveler")){ // or (strpos($_SERVER["HTTP_USER_AGENT"], "Trident") AND strpos($_SERVER["HTTP_USER_AGENT"], "SLCC2")) $browser = 'telcent'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "SE 2") AND strpos($_SERVER["HTTP_USER_AGENT"], "MetaSr")){ $browser = 'sogou'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "360SE") AND !strpos($_SERVER["HTTP_USER_AGENT"], "TencentTraveler")){ $browser = '360'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "QIHU 360EE") AND !strpos($_SERVER["HTTP_USER_AGENT"], "TencentTraveler")){ $browser = '360'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "MSIE 9.0")){ $browser = 'ie9'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "MSIE 8.0")){ $browser = 'ie8'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "MSIE 7.0")){ $browser = 'ie7'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "MSIE 6.0")){ $browser = 'ie6'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "Firefox")){ $browser = 'firefox'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "Chrome")){ $browser = 'chrome'; }elseif(strpos($_SERVER["HTTP_USER_AGENT"], "Safari")){ $browser = 'safari'; } redirect("/start/$browser");exit; }
3. 中英文混合截取指定长度。
有一些自己写的函数,来实现完美截取,但是比较麻烦,繁琐。
如果精确度不需要太高的话那就用系统自带的mb_substr()函数好了:
mb_substr('我们123a好', 0, 6,'utf-8'); //输出:我们123a 'utf-8' 一定要加上去
他没有把中文算成2个字符,所有的算成1个字符,这对于有中英文混合的字符串,只需要截图前6位,这样的例子来说,非常实用。
4. 获取url后缀
一个内置函数搞定:
$ext = strrchr($filename,'.');
5. 等于与全等于
==、=== 对应的是!=和!==。 没有!=== 啊,混蛋!
6. 子frame如何跳出自身的框架,执行父框架的操作。
echo "<script>alert('登陆超时,请重新登陆');parent.location.href='/index.php/Public/login/'</script>"; die;
用parent.xx.xx 执行。
7. 换行符
unix系列用 \n
windows系列用 \r\n
mac用 \r
PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性
如:
<?php echo PHP_EOL; //windows平台相当于 echo "\r\n"; //unix\linux平台相当于 echo "\n"; //mac平台相当于 echo "\r";?>
类似常用的还有 DIRECTORY_SEPARATOR
可以用函数get_defined_constants()
来获取所有PHP常量
8. define 一个常量
define(ROOT,direname(_FILE__));echo ROOT;
上面输出的确可以输出ROOT的值,但是也会有一个警告:
Use of undefined constant ROOT - assumed 'ROOT'
所以,定义常量时,一定要加个引号
。
define('ROOT',direname(_FILE__));echo ROOT;
9. 数组装换成带引号的字符串
$row = array('ayi','太原','hello',78);$b = "'".implode( "','", $row ) . "'";var_dump($b);// "'ayi','太原','hello','78'"
10. PHP返回404
header('HTTP/1.1 404 Not Found');header("status: 404 Not Found");
11. PHP面向对象和面向过程区别
面向过程 和 面向对象 只是思维方式的差异,与语言无关
从软件工程学上看
面向过程 自顶向下分析,自底向上编程
面向对象 自顶向下分析,自顶向下编程
因此
面向过程 必须清晰的了解项目的每一个细节后才可动手
面向对象 可在粗略了解项目时就可动手,在实现过程中逐步细化
现在的人都很浮躁,不愿意沉下心来做艰苦细致的调差分析工作。这就是 oop 备受推崇的主要原因之一
12. xml转换成json
$xml_obj = simplexml_load_string($xml_info);$json = json_encode($xml_obj);
13. 分页
传统的分页,我们都是先select count(*) 求出总共有多少,再用LIMIT 0,20 来求出这一页有多少。
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM user WHERE username = 'yangyi' LIMIT {$start},{$limit}";$list = $this->db->fetchAll($sql);$total = $this->db->fetchOne('SELECT FOUND_ROWS()');return array('list' => $list, 'total' => $total);
用到了 SELECT SQL_CALC_FOUND_ROWS * FROM
和SELECT FOUND_ROWS()
来联合求出。
14.去除换行
PHP在不同的系统中,换行是不同的
Linux:\n
Windows:\r\n
mac:\r
所以去除回车换行的方法:
1.使用str_replace 来替换换行
$str= str_replace(array("\r\n", "\r", "\n"), "", $str);
2.使用php定义好的变量(比较好的方法)
$str= str_replace(PHP_EOL, '', $str);
15 . smarty 里面直接使用 php的内置函数
$start_time = ‘2015-05-23 23:01:23’; 变成 ‘2015年05月23日 23:01’
{=$start_time|strtotime|date_format:"%Y年%m月%d日 %H:%M"=}
$score = ‘3:5’ 。分别获取 3 和 5
{=$score|substr:0:1=}{=$score|substr:2:1=}
16. 用php内置函数完成二维数组排序
用到的函数是array_multisort()
专门给多纬数组排序。
它的官方介绍文档array_multisort
直接例子:
$data[0] = array(‘volume' => 67, ‘edition' => 2); $data[1] = array(‘volume' => 86, ‘edition' => 1); $data[2] = array(‘volume' => 85, ‘edition' => 6); $data[3] = array(‘volume' => 98, ‘edition' => 2); $data[4] = array(‘volume' => 86, ‘edition' => 6); $data[5] = array(‘volume' => 67, ‘edition' => 7);
上面是一个简单的二维数组,如果我想按照里面的volume
字段排序:
根据文档介绍,先得把这个需要排序的字段数组给初始化出来:
foreach ($data as $key => $row) { $volume[$key] = $row['volume']; $edition[$key] = $row['edition']; }
然后按照这个字段数组排序:
array_multisort($volume, SORT_ASC, $data); //直接影响$data的值。
也可以有按照多个值排序,先按照volume
倒序排序,如果相同的,再按照edition
正序排:
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
最后得到的$data值就是排序好的值了。
volume | edition ——-+——– 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7
17 . 在一个数组中的指定位置插入一个元素,其他元素往后移。
用到的是php的内置函数:array_slice
。这个函数的作用是分割数组。
官方用法
它一般有2个用法:
$b = array_slice($a, 0, 3); //表示从0个开始取出3个元素。返回值$b也是一个数组
上面是我们平时用的最多的用法,用分割数组。
如果你再加一个字段,就可以分割并且再拼接了,就是我要用到的:
//在数组$a的第n个元素的位置上插入$p,原来的第n位以以后往后移。//$p如果是个数组就是支持2维数组了。array_splice($a, $n-1, 0, $p);
加入这个参数的意思是,用$p
去替换掉被移除的,但是,我们的长度是0,没有别移除,然后又拼接上去了。算是奇淫技巧吧。而且也直接更改了$a
的值。
- PHP中常用代码块集锦
- Xcode中创建常用代码块
- 【飞阅】XML中常用JS代码块
- JS中一些常用的代码块
- JS中一些常用的代码块
- JS中一些常用的代码块
- JavaScript常用代码集锦
- javascript常用代码集锦
- AS常用代码集锦
- 常用JS代码集锦
- 常用代码段集锦
- 常用代码集锦(ASP)
- JavaScript常用代码集锦
- as3 常用代码集锦
- 常用 js代码集锦
- 常用java代码集锦
- JQuery常用代码集锦
- 常用代码片段集锦
- Android 属性动画(Property Animation) 完全解析 (下)
- xcode 中 UILable 使用方法简介
- 使用Apache的ab工具进行压力测试
- Android里的相对坐标
- android中实现View的振动
- PHP中常用代码块集锦
- 混合所有制股份公司的产权关系及其作用
- unrecognized selector sent to instance 0x7fbb51c7c490问题解决方法之一
- B2B与B2C区别有哪些?
- 12.2虚基类骑摩托车
- 读ini文件和IsDlgButtonChecked(IDC_CHECK_NODEEDIT)遇到的bug
- PHP学习:文件操作
- Heroku - No account specified Problem
- iOS CACoreAnimation :CAKeyframeAnimation