编程技术

PHP 常用函数

cnguu · 10月8日 · 2018年

数组函数

shuffle

打乱数组

<?php
$my_array = [
	'a' => 'red',
	'b' => 'green',
	'c' => 'blue',
	'd' => 'yellow',
	'e' => 'purple'
];
shuffle($my_array);
print_r($my_array);

运行结果:

Array
(
    [0] => purple
    [1] => green
    [2] => red
    [3] => yellow
    [4] => blue
)

array_rand

从数组中随机取出一个或多个单元

<?php
$a = ['red', 'green', 'blue', 'yellow', 'brown'];
$random_keys = array_rand($a, 3);
echo $a[$random_keys[0]]; // green
echo $a[$random_keys[1]]; // blue
echo $a[$random_keys[2]]; // brown

array_flip

交换数组中的键和值

<?php
$input = ['a', 'b', 'c'];
$flipped = array_flip($input);
print_r($flipped);

运行结果:

Array
(
    [oranges] => 0
    [apples] => 1
    [pears] => 2
)

array_walk

使用用户自定义函数对数组中的每个元素做回调处理

<?php
function myfunction($value, $key)
{
    echo 'The key ' . $key . ' has the value ' . $value . '<br>';
}

$a = [
    'a' => 'red',
    'b' => 'green',
    'c' => 'blue',
];
array_walk($a, 'myfunction');

运行结果:

The key a has the value red
The key b has the value green
The key c has the value blue

调用某类中的函数:

array_walk($a, [
    'myClass',
    'myfunction',
]);

array_map

为数组的每个元素应用回调函数

<?php
function cube($n)
{
    return($n * $n * $n);
}

$a = [1, 2, 3, 4, 5];
$b = array_map('cube', $a);
print_r($b);

运行结果:

Array
(
    [0] => 1
    [1] => 8
    [2] => 27
    [3] => 64
    [4] => 125
)

array_map 和 array_walk 区别:
array_walk:只接收一个指定的数组,只返回 true/false,可以接收一个额外的任意参数传递给回调

array_map:可接收多个指定的数组,返回一个数组,不能用数组键操作

array_filter

用回调函数过滤数组中的单元

<?php
function odd($var)
{
    return($var & 1);
}

function even($var)
{
    return(!($var & 1));
}

$array1 = [
    'a' => 1,
    'b' => 2,
    'c' => 3,
    'd' => 4,
    'e' => 5,
];
$array2 = [6, 7, 8, 9, 10, 11, 12];
echo '基数:';
print_r(array_filter($array1, 'odd'));
echo '偶数:';
print_r(array_filter($array2, 'even'));

运行结果:

Odd :
Array
(
    [a] => 1
    [c] => 3
    [e] => 5
)
Even:
Array
(
    [0] => 6
    [2] => 8
    [4] => 10
    [6] => 12
)

array_reduce

用回调函数迭代地将数组简化为单一的值

<?php
$arr = ['AAAA', 'BBBB', 'CCCC'];
function myfunction($carry, $item)
{
    return $carry . $item;
}
$res = array_reduce($arr, 'myfunction');
echo $res; // AAAABBBBCCCC

结果分析:

给定的数组长度为 3,故总迭代三次
1. 第一次迭代时,$carry = null,$item = ‘AAAA’,返回 AAAA
2. 第二次迭代时,$carry = ‘AAAA’,$item = ‘BBBB’,返回 AAAABBBB
3. 第三次迭代时,$carry = ‘AAAABBBB’,$item = ‘CCCC’,返回 AAAABBBBCCCC

带初始值的情况:
第一次迭代时,$carry = ‘DDDD

echo array_reduce($arr, ‘myfunction’, ‘DDDD’); // DDDDAAAABBBBCCCC’

array_reverse

返回单元顺序相反的新数组

<?php
$input  = array("php", 4.0, array("green", "red"));
$reversed = array_reverse($input);
$preserved = array_reverse($input, true);

print_r($input);
print_r($reversed);
print_r($preserved);

运行结果:

Array
(
    [0] => php
    [1] => 4
    [2] => Array
        (
            [0] => green
            [1] => red
        )

)
Array
(
    [0] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [2] => php
)
Array
(
    [2] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [0] => php
)

list

把数组中的值赋给一组变量

仅能用于数字索引的数组,并假定数字索引从 0 开始

<?php
$info = ['I', 'Love', 'Cnguu'];
list($a, $b, $c) = $info;
echo $a . ' ' . $b . ' ' . $c; // I Love Cnguu

in_array

检查数组中是否存在某个值,区分大小写

<?php
$os = ['Cnguu', 'Jack', 'Tom'];
if (in_array('Cnguu', $os)) {
    echo 'YES';
} else {
    echo 'NO';
}
// YES

字符串函数

explode

使用一个字符串分割另一个字符串

<?php
$str = 'Cnguu is a handsome boy ! I love him !';
print_r(explode(' ', $str));

运行结果:

Array
(
    [0] => Cnguu
    [1] => is
    [2] => a
    [3] => handsome
    [4] => boy
    [5] => !
    [6] => I
    [7] => love
    [8] => him
    [9] => !
)

implode

将一个一维数组的值转化为字符串

<?php
$arr = [
    'Cnguu',
    'is',
    'a',
    'handsome',
    'boy',
    '!',
    'I',
    'love',
    'him',
    '!',
];
echo implode(' ',$arr); // Cnguu is a handsome boy ! I love him !

join

此函数是 implode() 的别名,使用完全相同

str_replace

子字符串替换,区分大小写

str_ireplace 则是不区分大小写

<?php
echo str_replace('world', 'Cnguu', 'Hello world!'); // Hello Cnguu!

nl2br

在字符串所有新行之前插入 HTML 换行标记

<?php
echo nl2br("foo isn't\n bar");

运行结果:

foo isn't<br />
 bar

strtolower

将字符串转化为小写

<?php
$str = 'I Love Cnguu';
$str = strtolower($str);
echo $str; // i love cnguu

strtoupper

将字符串转化为大写

<?php
$str = 'I Love Cnguu';
$str = strtoupper($str);
echo $str; // I LOVE CNGUU

ucfirst

将字符串的首字母转换为大写

<?php
echo ucfirst('cnguu'); // Cnguu

lcfirst

使一个字符串的第一个字符小写

<?php
echo lcfirst('Cnguu'); // cnguu

ucwords

将字符串中每个单词的首字母转换为大写

<?php
echo ucwords('i love cnguu'); // I Love Cnguu

strip_tags

从字符串中去除 HTML 和 PHP 标记

<?php
$str = 'Hello <b><i>world!</i></b>';
echo strip_tags($str);        // Hello world!
echo strip_tags($str, '<b>'); // Hello <b>world!</b>

strpos

查找字符串首次出现的位置,区分大小写

stripos() 则是不区分大小写

<?php
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);
if ($pos === false) {
    echo '没有找到';
} else {
    echo '位置在' . $pos; // 位置在0
}

strrpos

计算指定字符串在目标字符串中最后一次出现的位置,区分大小写

strripos() 则是不区分大小写

<?php
$mystring = '0123456789a123456789b123456789c';
$findme   = '7';
$pos = strrpos($mystring, $findme);
if ($pos === false) {
    echo '没有找到';
} else {
    echo '位置在' . $pos; // 位置在27
}

substr

返回字符串的子串

<?php
echo substr('abcdef', -2);    // ef
echo substr('abcdef', -3, 1); // d
echo substr('abcdef', 2, -1); // cde
echo substr('abcdef', 1);     // bcdef
echo substr('abcdef', 1, 3);  // bcd
echo substr('abcdef', 4, -4); // ''

strcmp

二进制安全字符串比较,区分大小写

strcasecmp() 则是不区分大小写

<?php
$var1 = 'Hello';
$var2 = 'hello';
if (strcmp($var1, $var2) !== 0) {
    echo '不同';
} else {
    echo '相同';
}
// 不同

ord

返回第一个字符的 ASCII 码值

<?php
echo ord('a'); // 97

chr

返回指定的字符

<?php
echo chr(97); // a

str_shuffle

随机打乱一个字符串

<?php
echo str_shuffle('abc123'); // c1b23a

日期时间函数

date_default_timezone_get

获取当前时区

<?php
echo date_default_timezone_get(); // UTC

date_default_timezone_set

动态设置当前时区

<?php
date_default_timezone_set('Asia/Shanghai');
echo date_default_timezone_get(); // Asia/Shanghai

时区列表

time

返回当前的 Unix 时间戳

<?php
echo time(); // 1536883439

date

格式化时间日期

<?php
echo '当前时间:' . date('Y-m-d H:i:s'); // 当前时间:2018-09-14 00:08:02

mktime

取得一个日期的 Unix 时间戳

<?php
echo mktime(8, 6, 2, 9, 15, 2018);                      // 1536998762
echo date('Y-m-d H:i:s', mktime(8, 6, 2, 9, 15, 2018)); // 2018-09-15 08:06:02

strtotime

将任何字符串的日期时间描述解析为 Unix 时间戳

<?php
echo strtotime('now');                          // 1536885907
echo strtotime('+1 day');                       // 1536972307
echo strtotime('+1 week');                      // 1537490707
echo date('Y-m-d H:i:s', strtotime('now'));     // 2018-09-14 08:45:07
echo date('Y-m-d H:i:s', strtotime('+1 day'));  // 2018-09-15 08:45:07
echo date('Y-m-d H:i:s', strtotime('+1 week')); // 2018-09-21 08:45:07

microtime

返回当前 Unix 时间戳和微秒数

<?php
echo microtime();     // 0.40733200 1536886857
echo microtime(true); // 1536886857.4073

getdate

取得日期时间信息

<?php
$today = getdate();
print_r($today);

运行结果:

Array
(
    [seconds] => 58
    [minutes] => 7
    [hours] => 9
    [mday] => 14
    [wday] => 5
    [mon] => 9
    [year] => 2018
    [yday] => 256
    [weekday] => Friday
    [month] => September
    [0] => 1536887278
)

gettimeofday

取得当前时间

<?php
print_r(gettimeofday());
echo gettimeofday(true);

运行结果:

Array
(
    [sec] => 1536887385
    [usec] => 448776
    [minuteswest] => -480
    [dsttime] => 0
)
1536887385.4488

checkdate

验证一个格里高里日期

<?php
var_dump(checkdate(12, 31, 2000)); // bool(true)
var_dump(checkdate(2, 29, 2001));  // bool(false)

文件系统函数

PHP 文件系统

2018-10-7 0

数字函数

floor

舍去法取整,舍去小数部分取整

<?php
echo floor(4.3);   // 4
echo floor(9.999); // 9
echo floor(-3.14); // -4

ceil

进一法取整

<?php
echo ceil(4.3);   // 5
echo ceil(9.999); // 10
echo ceil(-3.14); // -3

mt_rand

生成更好的随机数

<?php
echo mt_rand();      // 255971576
echo mt_rand(5, 15); // 11

文本处理函数

preg_match

执行匹配正则表达式

<?php
if (preg_match('/cnguu/i', 'Cnguu is a handsome boy ! I love him !')) {
    echo '查找到匹配的字符串 cnguu。';
} else {
    echo '未发现匹配的字符串 cnguu。';
}

// 从URL中获取主机名称
preg_match('@^(?:https://)?([^/]+)@i', 'https://cnguu.cn', $matches);
echo $matches[1]; // cnguu.cn

preg_match_all

执行一个全局正则表达式匹配

<?php
$str = 'Name: <b>Cnguu</b> <br> Title: <b>a handsome boy</b>';
preg_match_all('/<b>(.*)<\/b>/U', $str, $pat_array);
print_r($pat_array[0]);

运行结果:

Array
(
    [0] => <b>Cnguu</b>
    [1] => <b>a handsome boy</b>
)

preg_match 和 preg_match_all 区别:
preg_match:只匹配一次,有一个结果就结束
preg_match_all:全文匹配,匹配所有的结果

preg_replace

执行一个正则表达式的搜索和替换

<?php
// 将目标字符串 $str 中的文件名替换后增加 em 标签
$str = '主要有以下几个文件:index.php, style.css, common.js';
$p = '/\w+\.\w+/i';
$str = preg_replace($p, '<em>$0</em>', $str);
echo $str;

运行结果:

主要有以下几个文件:<em>index.php</em>, <em>style.css</em>, <em>common.js</em>

preg_filter

执行一个正则表达式搜索和替换

<?php
$subject = ['1', 'a', '2', 'b', '3', 'A', 'B', '4'];
$pattern = ['/\d/', '/[a-z]/', '/[1a]/'];
$replace = ['A:$0', 'B:$0', 'C:$0'];

echo "preg_filter 返回\n";
print_r(preg_filter($pattern, $replace, $subject));

echo "preg_replace 返回\n";
print_r(preg_replace($pattern, $replace, $subject));

运行结果:

preg_filter 返回
Array
(
    [0] => A:C:1
    [1] => B:C:a
    [2] => A:2
    [3] => B:b
    [4] => A:3
    [7] => A:4
)
preg_replace 返回
Array
(
    [0] => A:C:1
    [1] => B:C:a
    [2] => A:2
    [3] => B:b
    [4] => A:3
    [5] => A
    [6] => B
    [7] => A:4
)

preg_filter 和 preg_replace 区别:
preg_filter 仅仅返回(可能经过转化)与目标匹配的结果

preg_grep

执行一个正则表达式的搜索,但不替换(相当于阉割版 preg_filter())

<?php
$subject = ['1', 'a', '2', 'b', '3', 'A', 'B', '4'];
$pattern = '/[a-z]/';
print_r(preg_grep($pattern, $subject));

运行结果:

Array
(
    [1] => a
    [3] => b
)

preg_split

通过一个正则表达式分隔字符串

<?php
// 使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split('/[\s,]+/', 'I love, cnguu');
print_r($keywords);

运行结果:

Array
(
    [0] => I
    [1] => love
    [2] => cnguu
)

preg_quote

转义正则表达式字符

<?php
$keywords = 'cnguu[0-9]{abc}';
$keywords = preg_quote($keywords);
echo $keywords; // cnguu\[0\-9\]\{abc\}

网络函数

setcookie

发送 Cookie

<?php
setcookie('name', 'Cnguu');
echo $_COOKIE['name']; // Cnguu

// 删除 cookie
setcookie('name', '', time() - 1);

杂项函数

usleep

以指定的微秒数延迟执行

<?php
echo date('h:i:s'); // 08:57:25
usleep(2000000);
echo date('h:i:s'); // 08:57:27
0 条回应