官方文档拾遗(函数篇)

说明

上一篇了总结了PHP官方文档的语法基础部分,这一篇再补充一下PHP的内置函数部分,还没有看完,以后再加吧。

trim()函数的工作方式

trim()函数默认可以过滤空白字符.如果指定第二个参数,则过滤指定的字符.这里是以字符为单位而不是以字符串为单位过滤.如下例:

1
2
3
$hello  = 'Hello World';
$trimmed = trim($hello, 'Hdle');
var_dump($trimmed); // o Wor

第二个参数也可以是使用”..”来表示一个字符范围,如”a..z”;见下例:

1
echo trim('abcdef1234','a..d'); // ef1234

生成请求串和解析请求串

http_build_query()函数可将一个关联数组生成为一个URL请求串的形式,而parse_str()函数正好相反,把请求串构建成数组, 见下例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$param = array('foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk');
$query = http_build_query($param);
print_r($query); // foo=bar&baz=boom&cow=milk

parse_str($query, $output);
print_r($output);
/*
Array(
[foo] => bar
[baz] => boom
[cow] => milk
)
*/

asort()函数对二维数组的排序

asort()函数对数组进行排序并保持索引关系, 也可以对二维数组进行排序,并且是以第一个元素的值为准. 如果想对二维数组的某个二维的值排序,将其放在第一位即可.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
$people = array( 
array("name"=>"Bob", "age"=>18),
array("name"=>"Greg","age"=>12),
array("name"=>"Andy","age"=>15),
);
asort($people);
print_r($people);
/*
Array
(
[2] => Array
(
[name] => Andy
[age] => 15
)

[0] => Array
(
[name] => Bob
[age] => 18
)

[1] => Array
(
[name] => Greg
[age] => 12
)

)
*/

$people = array(
array("age"=>18,"name"=>"Bob"),
array("age"=>12,"name"=>"Greg"),
array("age"=>15,"name"=>"Andy"),
);
asort($people);
print_r($people);

/*
Array
(
[1] => Array
(
[age] => 12
[name] => Greg
)

[2] => Array
(
[age] => 15
[name] => Andy
)

[0] => Array
(
[age] => 18
[name] => Bob
)

)
*/

可尝试将第二个asort改为arsort,这时将以age倒序排序. 同理,像sort()/rsort()函数也有此特性

除了上面的方法外,PHP还有内部函数支持,以下函数就是通过内部函数实现,效果和上面一样:

1
2
3
4
5
6
function multiSort($arr, $field, $sort = SORT_DESC){
$benchArr = array_column($arr, $field);
array_multisort($benchArr, $sort, $arr);
return $arr;
}
$sortedPeople = multiSort($people, 'age');

getimagesize函数使用注意项

getimagesize函数如果不能访问指定的图像或者其不是有效的图像,
getimagesize() 将返回 FALSE 并产生一条 E_WARNING 级的错误。所以在使用时要么对其进行 “存在性判断” 等合法性判断

isset()函数

用于检测变量是否被赋值,并且该值不是NULL。具体情况如下:

  • 如果变量之前被赋值,之后又被unset()之后,isset()将返回false;
  • 若测试一个被设置成NULL的变量,将返回false;
  • 该函数支持多个变量批量检测,只有在全部参数都返回TRUE时才会为TRUE, 检测过程从左至右,中途遇到没有设置的变量时就会立即停止。
  • 该函数还可用于检测字符串的下标位置是否有值,当然也可检测数组中元素。如果想知道数组的某个KEY是否存在,建议使用array_key_exists()函数,因为它是直接判断KEY,而不管值。
1
2
3
4
5
6
7
8
9
10
11
$str = 'abc';
var_dump(isset($str{1})); // bool(true)
var_dump(isset($str{3})); // bool(false)

$arr = ['name' => 'Bob', 'age' => 20];
var_dump(isset($arr['age'])); // bool(true)
var_dump(isset($arr['weight'])); // bool(false)

$arr = array('first' => null, 'second' => 4);
isset($arr['first']); // returns false
array_key_exists('first', $arr); // returns true

str_split()函数

用于将字符串转换为数组,在处理多字节字符如中文时,str_split()还是会按字节数转换,而非字符数;这就有问题。在手册中看到一个解决方案:

1
$arr = preg_split('/(?<!^)(?!$)/u', '中国'); // $arr输出为 ['中', '国']
  • © 2015-2020 watson

请我喝杯咖啡吧~

支付宝
微信