PHP 常用函数

 变量:

var_dump($val) 、 print_r($val) //打印变量

serialize($val)、unserialize($val)//用于序列化对象或数组,并返回一个字符串

 

类型转换:

(int),(bool),(float),(string),(array),(object)($val);

$b=(int)$a;//把$a转换为整形

intval(),floatval(); doubleval(); strval()

$b=intval($a);//获取$a中整形数值

 

类型判断:

empty() / isset() / unset() //  isset函数用于检测变量为非null值;empty判断是否为"空",其中空字符串、0、false都为真;

is_bool/int/float/string/array/object/resource/null()

is_numberic();’//判断是否为任何类型的数字或者数组字符串

is_callable();//判断是否为有效函数名称

eg:is_int($val);//判断b是否为整形,返回bool值

 

字符串函数:

strlen($str);//返回字符串长度 mb_strlen($str) 可以返回中文字符长度;
strtolower($str);//字母转小写
strtoupper($str);//字母转大写
ucwords($str);//每一个单词的首字母转大写
ucfirst($str);//首字母转大写  lcfirst($str) //首字母转小写
nl2br($str) //在字符串中的换行符(\n)替换为<br>
number_format("1000000") //把数字按照西方的千位格式化输出:1,000,000
trim($str,$del_str);//删除左右侧字符串$del_str,如果省略第二个参数,则只删除字符串右侧的预定义字符(空格 \0 \r \n \t )
ltrim($str,$del_str);//同上,只删除字符串左侧的
rtrim($str,$del_str);//同上,只删除字符串右侧的,同函数chop
特殊用法:ltrim($str,'0..9') 移除左侧数字开头的字符,ltrim($str,'a..z') 移除左侧a-z字符

strpos($str,'a’);//字符串a 在$str 第一次出现的位置 索引0开始 没有出现返回false 区分大小写
stripos($str,'a’);//同上 但是不区分大小写
strrpos($str,'a’);//字符串a 在$str 最后一次出现的位置 索引0开始 没有出现返回false 区分大小写
strripos($str,'a’);//同上 但是不区分大小写
preg_match('/php/i',$str) //匹配到一次就返回,返回结果为0或1,通常用于判断;
preg_match_all('/php/i',$str,$matches,$flag=PREG_PATTERN_ORDER) //匹配到所有的内容,并把匹配结果放到$matches,返回结果为匹配次数,通常用于搜索;$flag用于限定$matches的内容形式; substr($str,0,3);//截取字符串,长度不填默认截取到最后,参数为负数则倒数,语法:substr(字符串,位置,长度),要截取含中文字符使用:mb_substr strstr($str,'a',false);//截取字符串 $str 中的第一个字符'a'后的字符串 如 sabc -> abc, stristr不区分大小写,通过第3个参数false(默认)和true,分别获取后面和前面的字符串,注意没有strrstr函数 strrchr($str,'a');//截取字符串 $str 中最后一个字符'a'后的字符串; strchr($str,'a') //截取字符串$str中第一个字符‘a’后的字符串,strstr的别名函数; str_replace('a','b',$str);//b替换$str 中的a 区分大小写,第一、二个参数,还可以是字符串数组(array('aa','bb')),表示搜索的多个字符串 和 替换的多个字符串 ; str_ireplace('a','b',$str);//替换 不区分大小写 preg_replace('/php/i',$replace,$str);//查找匹配的内容,并进行替换,返回替换结果,备注,参数可为字符串,也可为数组。 strrev($str);//字符串反转 abcd->dcba str_shuffle($str);//随机打乱字符串顺序 explode('-',$str);//指定分隔符分割字符串 返回数组 ‘-’ 分割$str implode('-',$arr);//数组拼接字符串 与explode()相反,join()是implode的别名函数 md5($str);//字符串MD5加密, crypt(str,salt) //使用DES、Blowfish 或 MD5 一种算法加密,根据php配置而定 printf('%s',$str) //输出格式化的字符串 sprintf()、 vprintf("%u",array(123))、 vsprintf()、 fprintf()、vfprintf() //printf前面有s表示输出到变量、有v表示通过数组传递数值、有f表示输出到文件

 

数组函数:
判断、查找、遍历 、修改、排序、
 
 
俩种创建:
array()方法:
$arr = array(1,"a",false,4.5);
$arr = array('a'=>1,'b'=>true);
字面量生成:
$arr = [1,2.11,"hello",'a',true];
$arr = ['a'=>1,'b'=>2.3];


判断: 2 in_array(search_value,array,strict):搜索数组中是否存在指定的值,eg:in_array(23,$array, TRUE) array_key_exists(key,array),检查某个数组中是否存在指定的键名,返回ture or false. 查找:6 array_search(value,array,strict):在数组中搜索某个键值,并返回对应的键名,否则返回false,eg:array_search('a',$array);
preg_grep('/php/i',$array,$flag=0):返回匹配到的元素(组成的数组),如果$flag=PREG_GREP_INVERT,则返回不匹配的元素组成的数组。

array_column(
array,column_key,index_key):获取数组中某个单一列的值,返回array, eg:array_column($array, 'last_name', 'id') array_count_values(array):用于统计数组中所有值出现的次数,返回一个关联数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。
array_slice(array,start,length,is_save_key):获取数组中的部分内容,eg:array_slice($array,0,5);
array_rand(array,number):返回数组中的一个随机键名,如果number大于1,则返回一个包含随机键名的数组。 array_keys(array,value,strict):获取数组中所有键名的一个新数组,返回array,eg:array_keys($array),如果传递value,则返回该键值对应的键名(组成的数组); array_values(array):返回包含数组中所有的值的数组,不保留键名.
修改: 9 - 合并3 栈4 截取1 去重1 array_chunk(array,size,preserve_keys):把一个数组分割为新的数组块, 返回一个多维的数值数组,eg:array_chunk($array,2,true); array_combine(array_keys,array_values): 合并两个数组来创建一个新数组,其中一个数组为键名,另一个数组的元素为键值, 返回合并后的数组。如果两个数组的元素个数不相同,则返回 FALSE,eg:array_combine($array1,$array2); array_fill(index,number,value):用给定的键值填充数组,返回array, eg:array_fill(3,4,"blue") array_fill_keys(array,value):用给定的指定键名的键值填充数组,返回array, eg: array_fill_keys($array,"blue") array_flip(array):用于反转数组中的键名和对应的键值,返回array. array_merge(array1,array2,array3...):用于把一个或多个数组合并为一个数组,返回array。 array_merge_recursive(array1,array2,array3...):同array_merge,区别是在处理两个或更多个数组元素有相同的键名的情况,array_merge_recursive不会进行键名覆盖,而是将多个相同键名的值递归组成一个数组。 array_pad(array,size,value):将指定数量的带有指定值的元素插入到数组中,如果您将 size 参数设置为负数,在数组之前插入元素,否则在最后插入,eg:array_pad($array,5,"blue") array_pop(array):返回数组中的最后一个元素,并删除(出栈). array_push(array,value1,value2...):将一个或多个元素插入数组的末尾(入栈),eg: array_push($a,"blue","yellow")。 array_shift(array):返回数组中的第一个元素,并删除. array_unshift(array,value1,value2,value3...):在数组开头插入一个或多个元素,返回新数组中元素的个数,eg:array_unshift($a,"blue")。 array_splice(array,start,length,array):用来删除数组中的一部分元素,可以直接删除,也可以用其他值来替代它,返回值为被移除的元素组成的数组,如果省略第四个参数,则为删除效果,如果length=0,则相当于插入,eg:array_splice($array1,2,0,$array2) array_unique(array):删除数组中重复的值。

array_diff(array1,array2,array3..):该函数用于比较(只比较键值),返回只存在于第一个,但不存在于其他数组的差集数组,此方法也用于删除效果,第二个以后的数组代表要删除的元素。
array_diff_key(array1,array2,array3..):只比较键名。
array_diff_assoc(array1,array2,array3..):同时比较键名和键值。 array_diff_ukey(array1,array2,array3,..,myfunction)和array_diff_uassoc使用用户自定义函数做比较. array_diff(根据值删除)和array_diff_key(根据键删除)常用于批量删除数组中元素,egg:array_diff($arr,['a','b']); array_diff_key($arr,['a'=>'随意值','b'=>'随意值']) 遍历:4 - 循环2 首尾各1
array_filter(array,myfunction,flag): 用回调函数过滤数组中的元素,返回array, eg:array_filter($array,"functionName"),一个常用操作是:array_filter($array),去除数组空元素(false、null、空格)。 array_map(myfunction,array1,array2,array3...): 将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新的值的数组,返回array。 array_reduce(array,myfunction,initial):发送数组中的值到用户自定义函数,并返回一个字符串,eg:array_reduce($a,"myfunction",5). array_walk(array,myfunction,parameter...):对数组中的每个元素应用用户自定义函数,返回true or false; array_walk_recursive(array,myfunction,parameter...):同array_walk,不同在于可以操作多维数组。 current(array)/pos(array):返回数组中的当前元素的值 next(array):将内部指针指向数组中的下一个元素,并输出。 prev(array):将内部指针指向数组中的上一个元素,并输出。 reset(array):将内部指针指向数组中的第一个元素,并输出。 end(array):将内部指针指向数组中的最后一个元素,并输出。 each(array):返回当前元素的键名和键值,并将内部指针向前移动。 key(array):从当前内部指针位置返回元素键名 排序:6 - sort4 反1 随1 array_reverse(array,preserve):将原数组中的元素顺序翻转,eg:array_reverse($array) shuffle(array):把数组中的元素按随机顺序重新排列 sort(array,sortingtype):对数值数组进行升序排序 rsort(array,sortingtype):对数值数组进行降序排序 asort(array,sortingtype):对关联数组按照键值进行升序排序 arsort(array,sortingtype):对关联数组按照键值进行降序排序 ksort(array,sortingtype):对关联数组按照键名升序排序 krsort(array,sortingtype):对关联数组按照键名进行降序排序 usort(array,myfunction):使用用户自定义的比较函数对数组进行排序 uasort(array,myfunction):使用用户自定义的比较函数对数组按键值进行排序 uksort(array,myfunction):使用用户自定义的比较函数对数组按键名进行排序 其他: count(array,mode)/sizeof(array,mode):返回数组中元素的数目 extract(array,extract_rules,prefix):从数组中将变量导入到当前的符号表,eg:extract($array) range(low,high,step):创建一个包含指定范围的元素的数组,eg:range(0,50,10) list(var1,var2...):用于在一次操作中给一组变量赋值,eg:list($a,$b) = $my_array


 

 
 

预防js脚本攻击(XSS 跨站脚本攻击):(1)输入过滤、(2)输出转义

strip_tags($str);   //过滤字符串中的 HTML、PHP 的标签  
htmlspecialchars($str,ENT_QUOTES);   //把预定义的字符(><$&' ")转换为 HTML 实体, htmlspecialchars_decode($str) 把一些预定义的 HTML 实体转换为字符。
htmlentities($str,ENT_QUOTES) //把特殊字符(支持的最多)转换为 HTML 实体 , html_entity_decode($str) 把 HTML 实体转换为字符。
addslashes($str);  //防止SQL注入,在预定义的字符(单双引号 反斜杠)前添加反斜杠
其他:Php的开源过滤器:SafeHtml,org\Filter::safeHtml

 


日期函数:

//当前时间
echo date("Y-m-d H:i:s").PHP_EOL : Y年m月d日H点i分s秒

//指定时间
echo date("Y-m-d H:i:s",$timestamp);

echo time(); //当前时间戳 echo strtotime("2018-01-18 08:08:08"); //指定时间戳, 将指定日期转成时间戳 echo mktime(hour,minute,second,month,day,year)//指定时间戳

 

Math 函数:

floor(number) 向下舍入为最接近的整数, egg: floor(1.5)
ceil(number) 向上舍入为最接近的整数, egg:ceil(1.5)

round(number,precision,mode) 对浮点数进行四舍五入,precision规定小数点后的尾数,默认是0,也可以为负数,egg: round(3.4)等于3 ;round(5.045, 2)等于 5.05;round(1241757, -3)等于1242000

rand(min,max) 生成随机min-max之间(包含min、max)的整数,egg:rand (10,100)
mt_rand(min,max)跟rand一样,但速度快4倍

 

 

Swoole4:php异步编程

Swoole提供了俩种异步编程方式,一种是协程Coroutine(同一进程下运行),一种是异步任务Task(不同进程下运行)。

什么是协程?协程是一个可以中断挂起,并在空闲时,返回来接着执行的特殊函数,一种比线程更轻量的存在。
Swoole协程,是把耗时的操作,放在协程中异步执行,不阻塞当前程序。比如,在注册流程中,需要发送短信验证码,需等短信发送完后,才能往下执行,此时,可以把发短信放在协程中,不再阻塞当前程序。

说明:Swoole所有的协程必须在协程容器里面运行,所以先建立一个协程容器,也就是 Swoole\Coroutine\run() 方法,这是一种直接裸写协程的方式(有时候Swoole会自动创建协程容器,参考),run中的协程叫做全协程,在全协程中添加多个子协程(即go函数,等价于Coroutine::create),可以并发执行,注意,子协程会优先执行,其次,才轮到外部协程代码。

use function Swoole\Coroutine\run;
use function Swoole\Coroutine\go;

run(function () {  //全协程;
  //发短信
}

run(function () { //全协程中添加子协程,子协程优先执行;
  sleep(1);
  go(function(){
    //发短信
  });

  go(function(){
    //发邮件
  });

}


异步任务Task:比协程更高效,因为它离开当前进程,在新进程中执行异步调用。其次,有些PHP函数是无法协程化的,比如mongodb、oracle、sql server等数据库操作,此时必须使用异步Task了。
使用方法:先建一个TCP 服务器,在onTask 回调函数中编写业务代码;然后,再建一个客户端(协程化),提供调用服务端的接口;最后,在PHP的业务代码中,调用客户端接口即可。

Server.php:服务器端
class Server
{
    private $server;

    public function __construct()
    {
        $this->server = new Swoole\Server('127.0.0.1', 9501);

        //设置异步任务的工作进程数量
        $this->server->set([
            'task_worker_num' => 4
        ]);
//此回调函数在worker进程中执行
        $this->server->on('Receive', function($serv, $fd, $reactor_id, $data) {
            //投递异步任务
            $task_id = $serv->task($data);
            echo "Dispatch AsyncTask: id={$task_id}\n";
        });

        //处理异步任务(此回调函数在task进程中执行)
        $this->server->on('Task', function ($serv, $task_id, $reactor_id, $data) {
            echo "New AsyncTask[id={$task_id}]".PHP_EOL;
            //返回任务执行的结果
            $serv->finish("{$data} -> OK");
     });

      //处理异步任务的结果(此回调函数在worker进程中执行)
      $this->server->on('Finish', function ($serv, $task_id, $data) {
          echo "AsyncTask[{$task_id}] Finish: {$data}".PHP_EOL;
      });

        $serv->start();
    }

}

 命令行中:php Server.php,运行服务器端;

client.php: 客户端
class
Client { private $client; public function __construct() { $this->client = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP); if (!$client->connect('127.0.0.1', 9501, 0.5)) { echo "connect failed. Error: {$client->errCode}\n"; } $this->client->send("hello world\n"); echo $this->client->recv(); $this->client->close(); }; }

最后,在php业务代码中,在协程中调用Client就可以了:

use Swoole\Coroutine\Http\Server;
use function Swoole\Coroutine\run;

//其他业务代码...
echo '...';

//调用异步task
run(function () {
   $client = new Client();
}

 

posted on 2020-03-19 09:56  飞哥100  阅读(439)  评论(0)    收藏  举报

导航