php一些高级函数方法
PHP高级函数
1、call_user_func (http://php.net/manual/zh/function.call-user-func.php) 2、get_class (http://php.net/manual/zh/function.get-class.php) 3、get_called_class (http://php.net/manual/zh/function.get-called-class.php)
4、array_map http://php.net/manual/zh/function.array-map.php
//为数组的每个元素应用回调函数
示例:
$str = '1 ,2,3';
$res = array_map(function ($v) {
return intval(trim($v)) * 2;
}, explode(',', $str)); $res的返回结果:
array(3) { [0]=> int(2) [1]=> int(4) [2]=> int(6) }
5、strpos http://php.net/manual/zh/function.strpos.php
//查找字符串首次出现的位置,从0开始编码,没有找到返回false
示例:
$time = "2019-03-02 12:00:00";
if(strpos($time,':') !== false){
$time = strtotime($time);
}
echo $time;
6、array_reverse http://php.net/manual/zh/function.array-reverse.php
//返回单元顺序相反的数组
示例:
$time = "12:13:14";
$arrTime = array_reverse(explode(':',$time));
var_dump($arrTime);
array(3) { [0]=> string(2) "14" [1]=> string(2) "13" [2]=> string(2) "12" }
7、pow http://php.net/manual/zh/function.pow.php
//指数表达式
示例:
$time = "12:13:14";
$arrTime = array_reverse(explode(':',$time));
$i = $s = 0;
foreach($arrTime as $time){
$s += $time * pow(60,$i); // 60 的 $i 次方
$i ++;
}
var_dump($s);
int(43994)
8、property_exist http://php.net/manual/zh/function.property-exists.php
// 检查对象或类是否具有该属性
//如果该属性存在则返回 TRUE,如果不存在则返回 FALSE,出错返回 NULL
示例:
class Test
{
public $name = 'daicr'; public function index()
{
var_dump(property_exists($this,'name')); // true
}
}
9、passthru http://php.net/manual/zh/function.passthru.php
//执行外部程序并且显示原始输出
//功能和exec() system() 有类似之处
示例:
passthru(\Yii::$app->basePath.DIRECTORY_SEPARATOR . 'yii test/index');
10、array_filter http://php.net/manual/zh/function.array-filter.php
//用回调函数过滤数组中的单元
示例:
class TestController extends yii\console\Controller
{
public $modules = ''; public function actionIndex()
{
//当不使用callBack函数时,array_filter会去除空值或者false
$enableModules = array_filter(explode(',',$this->modules));
var_dump(empty($enableModules)); //true //当使用callBack函数时,就会用callBack过滤数组中的单元
$arr = [1,2,3,4];
$res = array_filter($arr,function($v){
return $v & 1; //先转换为二进制,在按位进行与运算,得到奇数
});
var_dump($res);
//array(2) { [0]=> int(1) [2]=> int(3) }
}
}
·
11、current http://php.net/manual/zh/function.current.php
//返回数组中的当前单元 $arr = ['car'=>'BMW','bicycle','airplane'];
$str1 = current($arr); //初始指向插入到数组中的第一个单元。
$str2 = next($arr); //将数组中的内部指针向前移动一位
$str3 = current($arr); //指针指向它“当前的”单元
$str4 = prev($arr); //将数组的内部指针倒回一位
$str5 = end($arr); //将数组的内部指针指向最后一个单元
reset($arr); //将数组的内部指针指向第一个单元
$str6 = current($arr);
$key1 = key($arr); //从关联数组中取得键名 echo $str1 . PHP_EOL; //BMW
echo $str2 . PHP_EOL; //bicycle
echo $str3 . PHP_EOL; //bicycle
echo $str4 . PHP_EOL; //BMW
echo $str5 . PHP_EOL; //airplane
echo $str6 . PHP_EOL; //BMW
echo $key1 . PHP_EOL; //car
var_dump($arr); //原数组不变
12、array_slice http://php.net/manual/zh/function.array-slice.php
//从数组中取出一段 示例:
$idSet = [1,2,3,4,5,6,7,8,9,10];
$total = count($idSet);
$offset = 0;
$success = 0;
while ($offset < $total){
$arrId = array_slice($idSet,$offset,5);
//yii2的语法,此处,注意array_slice的用法就行
$success += $db->createCommand()->update($table,['sync_complate'=>1],['id'=>$arrId])->execute();
$offset += 50;
}
$this->stdout('共:' . $total . ' 条,成功:' . $success . ' 条' . PHP_EOL,Console::FG_GREEN); //yii2的语法
13、mb_strlen() http://php.net/manual/zh/function.mb-strlen.php
//获取字符串的长度
//strlen 获取的是英文字节的字符长度,而mb_stren可以按编码获取中文字符的长度 示例:
$str1 = 'daishu';
$str2 = '袋鼠';
echo strlen($str1) . PHP_EOL; //
echo mb_strlen($str1,'utf-8') . PHP_EOL; // echo strlen($str2) . PHP_EOL; // 4 一个中文占 2 个字节
echo mb_strlen($str2,'utf-8') . PHP_EOL; //
echo mb_strlen($str2,'gb2312') . PHP_EOL; //
14、listhttp://php.net/manual/zh/function.list.php
//把数组中的值赋给一组变量 示例:
list($access,$department)= ['all','1,2,3'];
var_dump($access); // all
15、strcasecmp https://www.php.net/manual/zh/function.strcasecmp.php
//二进制安全比较字符串(不区分大小写)
//如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。 示例:
$str1 = 'chrdai';
$str2 = 'chrdai';
var_dump(strcasecmp($str1,$str2)); // int 0
16、fopen rb https://www.php.net/manual/zh/function.fopen.php //1、使用 'b' 来强制使用二进制模式,这样就不会转换数据,规避了widown和unix换行符不通导致的问题,
//2、还有就是在操作二进制文件时如果没有指定'b'标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于\r\n 字符的奇怪问题。 示例:
$handle = fopen($filePath, 'rb');
17、fseek https://www.php.net/manual/zh/function.fseek.php
//在文件指针中定位
//必须是在一个已经打开的文件流里面,指针位置为:第三个参数 + 第二个参数 示例:
//将文件指针移动到文件末尾 SEEK_END + 0
fseek($handle, 0, SEEK_END);
18、ftell https://www.php.net/manual/zh/function.ftell.php
//返回文件指针读/写的位置 //如果将文件的指针用fseek移动到文件末尾,在用ftell读取指针位置,则指针位置即为文件大小。 示例:
//将文件指针移动到文件末尾 SEEK_END + 0
fseek($handle, 0, SEEK_END);
//此时文件大小就等于指针的偏移量
$fileSize = ftell($handle);
19、basename https://www.php.net/manual/zh/function.basename.php
//返回路径中的文件名部分 示例:
echo basename('/etc/sudoers.d'); // sudoers ,注意没有文件的后缀名,和pathinfo($filePath)['filename']功能差不多
20、pathinfo https://www.php.net/manual/zh/function.pathinfo.php
//返回文件路径的信息 示例:
$pathParts = pathinfo('/etc/php.ini');
echo $pathParts['dirname'] . PHP_EOL; // /etc ,返回路径信息中的目录部分
echo $pathParts['basename'] . PHP_EOL; // php.ini ,包括文件名和拓展名
echo $pathParts['extension'] . PHP_EOL; // ini ,拓展名
echo $pathParts['filename'] . PHP_EOL; // php ,只有文件名,不包含拓展名 ,和basename()函数功能差不多
21、headers_sent($file, $line) https://www.php.net/manual/zh/function.headers-sent.php
//检测 HTTP 头是否已经发送 //1、http头已经发送时,就无法通过header()函数添加更多头信息,使用次函数起码可以防止HTTP头出错
//2、可选参数$file和$line不需要先定义,如果设置了这两个值,headers_sent()会把文件名放在$file变量,把输出开始的行号放在$line变量里 22、header('$name: $value', $replace) https://www.php.net/manual/zh/function.header.php
//发送原生 HTTP 头 //1、注意:header必须在所有实际输出之前调用才能生效。
//2、header的$replace参数默认为true,会自动用后面的替换前面相同的头信息,如果设为false,则强制使相同的头信息并存 示例:
public function sendHeader()
{
if (headers_sent($file, $line)) {
throw new \Exception("Headers already sent in {$file} on line {$line}");
}
$headers = [
'Content-Type' => [
'application/octet-stream',
'application/force-download',
],
'Content-Disposition' => [
'attachment;filename=test.txt',
],
];
foreach($headers as $name => $values) {
//所有的http报头的名称都是首字母大写,且多个单词以 - 分隔
$name = str_replace(' ', '-', ucwords(str_replace('-', ' ', $name)));
$replace = true;
foreach($values as $value) {
header("$name: $value", $replace);
$replace = false; //强制使相同的头信息并存
}
}
}
22、array_multisort($array1, SORT_ASC|SORT_DESC, $array2) https://www.php.net/manual/zh/function.array-multisort.php
// 对多个数组或多维数组进行排序
//说明: $array1 : 排序结果是所有的数组都按第一个数组的顺序进行排列
// $array2 : 待排序的数组 示例:
$array2 = [
1000 => [
'name' => '张三',
'age' => 25,
],
1001 => [
'name' => '李四',
'age' => 26,
],
];
//如果想将 $array2 按照 age 进行排序。
//不过需要注意的是:两个数组的元素个数必须相同,不然就会出现一个警告信息:
//Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in ……
//第一步:将age的数据拿出来作为一个单独的数组,作为排序的依据。
$array1 = [];
foreach ($array2 as $key => $val) {
array_push($array1, $val['age']);
}
//第二步骤:使用 array_multisort() 进行排序。
array_multisort($array1, SORT_DESC, $array2);
var_dump($array2);
//数组的健名字如果是数字会被重置,字符串不会
// array (size=2)
// 0 =>
// array (size=2)
// 'name' => string '李四' (length=6)
// 'age' => int 26
// 1 =>
// array (size=2)
// 'name' => string '张三' (length=6)
// 'age' => int 2
23、strtr 转换指定字符串
23、strtr // 转换指定字符
//官网文档:https://www.php.net/manual/zh/function.strtr.php
strtr(string $str , string $from , string $to ) strtr ( string $str , array $replace_pairs ) //例如:
$str = "<div class='just-sm-6 just-md-6'><div class='control_text'>{label}<font>*</font></div></div> <div class='just-sm-18 just-md-18'><div class='control_element'>{input} {hint} {error}</div></div>";
$parts = [
'{label}' => '年龄',
'{input}' => '<input name="age" id="user-age" class="inputs" value="" />',
'{hint}' => '年龄必须是 0-200 直接的数字',
'{error}' => '格式不正确',
];
$string = strtr($str, $parts); echo htmlspecialchars($string); //<div class='just-sm-6 just-md-6'><div class='control_text'>年龄<font>*</font></div></div> <div class='just-sm-18 just-md-18'><div class='control_element'><input name="age" id="user-age" class="inputs" value="" /> 年龄必须是 0-200 直接的数字 格式不正确</div></div> var_dump(Yii::getAlias('@webroot'));
var_dump(Yii::getAlias('@web'));
24、ReflectionClass 报告类的有关信息
//ReflectionClass 报告了一个类的有关信息
//官网地址:https://www.php.net/manual/zh/class.reflectionclass.php
//例如:
$class = new \ReflectionClass($this);
//打印当前类文件所在目录
var_dump(dirname($class->getFileName())); //var/www/html/basic/controllers
25、call_user_func_array 调用回调函数,并把一个数组参数作为回调函数的参数
call_user_func_array 调用回调函数,并把一个数组参数作为回调函数的参数
//官网地址:https://www.php.net/manual/zh/function.call-user-func-array.php function foobar($arg, $arg2) {
echo __FUNCTION__, " got $arg and $arg2\n";
}
call_user_func_array("foobar", array("one", "two")); //输出结果: foobar got one and two
`
php一些高级函数方法的更多相关文章
- javascript高级函数
高级函数 安全的类型检测 js内置的类型检测并非完全可靠,typeof操作符难以判断某个值是否为函数 instanceof在多个frame的情况下,会出现问题. 例如:var isArray = va ...
- js 高级函数 之示例
js 高级函数作用域安全构造函数 function Person(name, age) { this.name = name; this.age = age; ...
- 浅谈JS中的高级函数
在JavaScript中,函数的功能十分强大.它们是第一类对象,也可以作为另一个对象的方法,还可以作为参数传入另一个函数,不仅如此,还能被一个函数返回!可以说,在JS中,函数无处不在,无所不能,堪比孙 ...
- Kotlin——基础的函数/方法详解
对于Kotlin中的函数来说,和JavaScript或者Lua这些语言很像,它有着这些语言的特性.但是也与这些语言就着许多不同之处.或许你更了解Java语言,然而对于Java语言来说,它不是不是闭包这 ...
- Day11 Python基础之装饰器(高级函数)(九)
在python中,装饰器.生成器和迭代器是特别重要的高级函数 https://www.cnblogs.com/yuanchenqi/articles/5830025.html 装饰器 1.如果说装 ...
- Tensorflow BatchNormalization详解:3_使用tf.layers高级函数来构建带有BatchNormalization的神经网络
Batch Normalization: 使用tf.layers高级函数来构建带有Batch Normalization的神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴 ...
- Tensorflow BatchNormalization详解:2_使用tf.layers高级函数来构建神经网络
Batch Normalization: 使用tf.layers高级函数来构建神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearningai课程 课程笔 ...
- 谈谈JS中的高级函数
博客原文地址:Claiyre的个人博客如需转载,请在文章开头注明原文地址 在JavaScript中,函数的功能十分强大.它们是第一类对象,也可以作为另一个对象的方法,还可以作为参数传入另一个函数,不仅 ...
- 一篇文章把你带入到JavaScript中的闭包与高级函数
在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. funct ...
随机推荐
- Codeforces Round #484 (Div. 2)Cut 'em all!(dfs)
题目链接 题意:给你一棵树,让你尽可能删除多的边使得剩余所有的联通组件都是偶数大小. 思路:考虑dfs,从1出发,若当前节点的子节点和自己的数目是偶数,说明当前节点和父亲节点的边是可以删除的,答案+1 ...
- mac 删除文件夹里所有的.svn文件
先用命令行,进入你要删除的文件夹中(./ 为这个文件夹的当前路径,也可以填写绝对路径) 命令行下输入: sudo find ./ -name ".svn" -exec rm -r ...
- c++ Qt向PHP接口POST文件流
Qt调用PHP写的接口,向其传递图片文件,并保存在服务器. 二进制文件无法直接传递,Qt采用Base64进行编码发送,PHP解码保存为文件. 注意:PHP收到数据之后会将POST过来的数据中的加号(+ ...
- 安装YApi 接口管理平台
yum install mongodb yum install -y nodejs git clone https://gitee.com/mirrors/YApi.git 克隆项目到本地 使用命令进 ...
- Lua模式匹配
Lua并不使用POSIX规范的正则表达式[4](也写作regexp)来进行模式匹配.主要的原因出于程序大小方面的考虑:实现一个典型的符合POSIX标准的regexp大概需要4000行代码,这比整个Lu ...
- Linux查看显示编辑文本文件
1:cat -bash-4.1$ cat --help 用法:cat [选项]... [文件]... 将[文件]或标准输入组合输出到标准输出. -A, --show-all 等于- ...
- Bootstrap-datepicker3官方文档中文翻译---Markup/标记(原文链接 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)
Markup/标记 下面是已经支持的标签的例子.这些标签本身不会提供DatePicker控件:你需要在标签上实例化Datepicker. input/输入框 最简单的例子: input获得焦点 (使用 ...
- poj1456 Supermarket 贪心+并查集
题目链接:http://poj.org/problem?id=1456 题意:有n个物品(0 <= n <= 10000) ,每个物品有一个价格pi和一个保质期di (1 <= pi ...
- Linux安装Discuz
安装lamp环境 安装参考 安装Discuz 1.进入官网 2.进入Discuz! 程序发布 3.选择最新版本 4.进入git地址 5.克隆下载 5. 确认Apache中的DocumentRoot配置 ...
- adb连接夜神模拟器执行命令
1.要进入夜神模拟器的bin目录 2.连接夜神模拟器 3.执行命令 cd %~dp0 nox_adb.exe connect 127.0.0.1>nul set num= :ok set /a ...