无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地。在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道,所以,对于PHP如何产生不重复随机数常用的几种方法小结一下(ps:方法1、4、5是我常用的,其余来自网络整理)
方法一:
代码如下 | 复制代码 |
<?php $numbers = range (1,50); //shuffle 将数组顺序随即打乱 shuffle ($numbers); //array_slice 取该数组中的某一段 $num=6; $result = array_slice($numbers,0,$num); print_r($result); ?> |
方法二:
代码如下 | 复制代码 |
<?php $numbers = range (1,20); //播下随机数发生器种子,可有可无,测试后对结果没有影响 srand ((float)microtime()*1000000); shuffle ($numbers); //跳过list第一个值(保存的是索引) while (list(, $number) = each ($numbers)) { echo "$number "; } ?> |
方法三:
代码如下 | 复制代码 |
<?php function NoRand($begin=0,$end=20,$limit=5){ $rand_array=range($begin,$end); shuffle($rand_array);//调用现成的数组随机排列函数 return array_slice($rand_array,0,$limit);//截取前$limit个 } print_r(NoRand()); ?> |
上述可以在1-20间随机产生5个不重复的值
方法四:
代码如下 | 复制代码 |
<?php $tmp=array(); while(count($tmp)<5){ $tmp[]=mt_rand(1,20); $tmp=array_unique($tmp); } print_r($tmp); ?> |
方法五:
代码如下 | 复制代码 |
<?php |
这个可能是比叫简单的了(ps:如果在range中指定了步长,就必须注意array_rand的第二个参数是否超出$tmp的长度)。
PHP提供非常丰富的数组函数,产生随机数大多可以从数组这个角度出发,若你还有方法提供,欢迎给出,文章将持续更新。
DIRECTORY_SEPARATOR在php是什么意思呢,在什么时候使用DIRECTORY_SEPARATOR最合理呢?下面来给各位介绍一下php DIRECTORY_SEPARATOR常量。我们知道DIRECTORY_SEPARATOR是一个PHP常量,代表反斜杠,因为windows系统和linux系统的反斜杠不一样。在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符,在linux上路径的分隔符是”/”。
那么在PHP代码中什么时候要用DIRECTORY_SEPARATOR代表反斜杠呢?
比如这句话:
代码如下 | 复制代码 |
require_once dirname(__FILE__).DIRECTORY_SEPARATOR . './../../../wp-config.php'; |
这两句PHP代码,为什么前面部分用DIRECTORY_SEPARATOR,而后面部分却用“/”呢
众所周知,windows下的是\和/,而LINUX下的是/
在程序本地运行很正常,上传到服务器后,发现图片没有显示出来,图片链接是绝对路径 var/,而且当中带有 \ 但是我记得这个路径已经处理成相对路径的
代码如下 | 复制代码 |
$path = dirname(dirname(dirname(__FILE__))).'\\'; $search = array( $path, '\\'); $replace = array( '', '/'); return str_replace($search,$replace,$this->tempfolder).$this->filename_prefix.$public.'.jpg'; |
可以各位也看出来了,第一行代码的用在LINUX “\\”, 就不行。
解决的办法是 用PHP 预定义常量DIRECTORY_SEPARATOR来代替'\','/'这样的路径分隔符,以前觉得既然windows,LINUX 都支持/,那都用成 / 得了,这是没错的。可是从这个例子可以看出,当要对路径字符串进行处理的时候,就比较危险了,所以最好还是用DIRECTORY_SEPARATOR吧
php引用是一个很有学问的东西了,下文我们来介绍php引用返回function & fun();学习笔记,希望例子可以帮助到各位。例子
代码如下 | 复制代码 |
<?php private $data = 'Hi'; public function & get(){ } $aa = new talker(); $aa->out(); |
例子二:
代码如下 | 复制代码 |
<?php $p = new person(); |
补充:函数的引用返回
代码如下 | 复制代码 |
<?php $a=test();//这条语句会输出 $b的值 为1 $a=&test();//这条语句会输出 $b的值 为3 |
下面解释下:
通过这种方式$a=test();得到的其实不是函数的引用返回,这跟普通的函数调用没有区别 至于原因: 这是PHP的规定
PHP规定通过$a=&test(); 方式得到的才是函数的引用返回
至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。) 这句狗屁话 害我半天没看懂
用上面的例子来解释就是
$a=test()方式调用函数,只是将函数的值赋给$a而已, 而$a做任何改变 都不会影响到函数中的$b
而通过$a=&test()方式调用函数呢, 他的作用是 将return $b中的 $b变量的内存地址与$a变量的内存地址 指向了同一个地方
即产生了相当于这样的效果($a=&$b;) 所以改变$a的值 也同时改变了$b的值 所以在执行了
$a=&test();
$a=5;
以后,$b的值变为了5
这里是为了让大家理解函数的引用返回才使用静态变量的,其实函数的引用返回多用在对象中
另附一个php官方例子:
代码如下 | 复制代码 |
This is the way how we use pointer to access variable inside the class. <?php private $data = 'Hi'; public function & get(){ } $aa = new talker(); $aa->out(); the output is "HiHowAreYou" |
例子
代码如下 | 复制代码 |
public static function isEmail( $email ) { return preg_match("/^([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,4}([\.][a-z]{2})?$/i" , $email ); public static function isNumber( $num ) public static function isUrl( $url , $preg = false ) return $status; |
补充:利用php自带函数来操作。
php验证邮箱
代码如下 | 复制代码 |
<?php |
php验证url地址
代码如下 | 复制代码 |
<?php |
php验证ip地址
代码如下 | 复制代码 |
<?php |
在php程序中,我们也经常需要考虑如何用php实现页面404跳转的写法,下面作者将如何用php进行404转向的写法和大家分享一下!
代码如下 | 复制代码 |
// 直接输出页面错误信息 @header("http/1.1 404 not found"); @header("status: 404 not found"); echo 'echo 404'; exit(); |
或者:
代码如下 | 复制代码 |
// 跳转到错误页面,推荐使用这种方法 // 注意include文件的路径不能是http网络路径 @header("http/1.1 404 not found"); @header("status: 404 not found"); include("/404.html"); exit(); |
我们也可以直接在 apache 设置 404 错误页面,具体定义方法如下:
在网站的根目录下新建一个 .htaccess 文件,然后在该文件中加入如下内容即可:
代码如下 | 复制代码 |
ErrorDocument 404 http://www.phpernote.com/404.html |
查看404是否设置成功可以利用 firefox 的 firebug 插件来查看,具体查看方法如下:
在已经安装firebug的情况下,用firefox浏览器打开要检查404状态码的页面,点击右下角小虫的图标,启动"网络"标签,依次打开"网络–所有/html–headers";如果一切正常,你就可以看到包括headers、响应在内的各项页面参数了。