常用函数
概念:
- 数组都是key-value对
- 数组 = 索引数组 + 关联数组, 也可以说 索引数组是关联数组的儿子,是一种特殊索引的关联数组,其只不过key是int型的关联数组(php数组的key判断是弱类型,'0’是与0相同的)
var_export返回什么类型
echo gettype(var_export($a, 1)).PHP_EOL; // 返回字符串
echo gettype(var_export($a, 0)); // 我也不知道返回的是啥类型
/*
string
array (
0 => 1,
1 => 4,
2 => 3,
3 => 2,
4 => 5,
)NULL
*/
trim特定字符
tirm + ltrim + rtrim
string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )
此函数返回字符串 str 去除首尾空白字符后的结果。如果不指定第二个参数,trim() 将去除这些字符:
- " " (ASCII 32 (0x20)),普通空格符
- “\t” (ASCII 9 (0x09)),制表符
- “\n” (ASCII 10 (0x0A)),换行符
- “\r” (ASCII 13 (0x0D)),回车符
- “\0” (ASCII 0 (0x00)),空字节符
- “\x0B” (ASCII 11 (0x0B)),垂直制表符
只能删除从边边开始都相同的字符,也就是说刚一碰见不同的它就软了
print_r(rtrim(ltrim('}{{{{aaaa}}}}}{', '{'), '}').PHP_EOL);
print_r(rtrim(ltrim('{{{{aaaa}}}}}', '{'), '}').PHP_EOL);、
print_r(trim('{{{{{{aaaaaa{{{{}', '{'));
/*
}{{{{aaaa}}}}}{
aaaa
aaaaaa{{{{}
*/
ceil和round的区别
float ceil ( float $value )
float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )
- ceil 进一法取整,也就说只要有小数点就进1
- round 四舍五入 小数点大于等于0.5进1
var_dump(ceil(0.01), ceil(1.02), round(0.5), round(0.05));
/*
float(1)
float(2)
float(1)
float(0)
*/
preg_match_all,三种标志的区别
- PREG_PATTERN_ORDER:二维数组,对于有括号的字符串会再push一个数组,只选取括号里的内容
- PREG_SET_ORDER:二维数组,其不管字符串中是否存在括号,其余与PREG_PATTERN_ORDER一样
- PREG_OFSET_CAPTURE:三维数组,其也是不管字符串中是否存在括号,但它还标出字符串下标,也因此它是三维数组
preg_match_all('/{(.*?)}/', '{title}{ggg}{3224}', $_cr_words_1, PREG_PATTERN_ORDER);
print_r($_cr_words_1);
preg_match_all('/({.*?})/', '{title}{ggg}{3224}', $_cr_words_2, PREG_SET_ORDER);
print_r($_cr_words_2);
preg_match_all('/({.*?})/', '{title}{ggg}{3224}', $_cr_words_3, PREG_OFFSET_CAPTURE);
print_r($_cr_words_3);
/* result:
Array
(
[0] => Array
(
[0] => {title}
[1] => {ggg}
[2] => {3224}
)
[1] => Array
(
[0] => title
[1] => ggg
[2] => 3224
)
)
Array
(
[0] => Array
(
[0] => {title}
[1] => {title}
)
[1] => Array
(
[0] => {ggg}
[1] => {ggg}
)
[2] => Array
(
[0] => {3224}
[1] => {3224}
)
)
Array
(
[0] => Array
(
[0] => Array
(
[0] => {title}
[1] => 0
)
[1] => Array
(
[0] => {ggg}
[1] => 7
)
[2] => Array
(
[0] => {3224}
[1] => 12
)
)
[1] => Array
(
[0] => Array
(
[0] => {title}
[1] => 0
)
[1] => Array
(
[0] => {ggg}
[1] => 7
)
[2] => Array
(
[0] => {3224}
[1] => 12
)
)
)
*/
array_push、+、array_merge的区别
- array_push:直接把数组元素当成一个整体插入到$a的末尾
- +,是循环数组元素push到$b的末尾(注意:其会检测是否key相同,若key相同,则不强行插入或者替换,也就是不会强行合并)
- array_merge : 跟 + 功能类似,但会强行合并已有的key
$a = $b = [1,2,3,4] ;
array_push($a, [5, 'a'=>1]);
var_dump(var_export($a,1));
var_dump(var_export($b + ['1' => 100, '4' => 5, 'a' => 1], 1));
/*
string(98) "array (
0 => 1,
1 => 2,
2 => 3,
3 => 4,
4 =>
array (
0 => 5,
'a' => 1,
),
)"
string(71) "array (
0 => 1,
1 => 2,
2 => 3,
3 => 4,
4 => 5,
'a' => 1,
)"
*/
取出数组的第一个元素
pos=current + key + next + prev + end + reset
- pos(&)=current(&):取出数组当前value,若无使用next、prev、end、reset等偏移内部指针的函数,将取出第一个元素
- key(&):取出数组当前key,若无使用next、prev、end、reset等偏移内部指针的函数,将取出第一个元素
- 所以若要取出数组第一个key-value对,可使用组装[ key( v a r ) = > c u r r e n t ( var) => current( var)=>current(var) ]
- next(&):将数组的内部指针向下移一位
- prev(&):将数组的内部指针向上移一位
- end(&):将数组的内部指针指向最后一位
- reset(&):将数组的内部指针指向第一位
$a = [1,4,3,2,5];
$b = [
'a' => 'a',
'c' => 2,
'b' => 4,
'd' => 3
];
var_dump(current($a), current($b));
next($a);
next($b);
// foreach会重置内部指针
foreach ($b as $k=>$v){
echo $k.$v.PHP_EOL;
}
var_dump(current($a), $a, current($b), $b);
/*
int(1)
string(1) "a"
aa
c2
b4
d3
int(4)
string(59) "array (
0 => 1,
1 => 4,
2 => 3,
3 => 2,
4 => 5,
)"
int(2)
string(59) "array (
'a' => 'a',
'c' => 2,
'b' => 4,
'd' => 3,
)"
*/
数组交集
array_intersect + array_intersect_assoc + array_intersect_key
array array_intersect ( array $array1 , array $array2 [, array $… ] )
array array_intersect_assoc ( array $array1 , array $array2 [, array $… ] )
array array_intersect_key ( array $array1 , array $array2 [, array $… ] )
- array_intersect 只检查value,value相同key不同则返回array1中的值
- array_intersect_assoc 检查key-value对
- array_intersect_key 只检查key
function array_intersect(array $array1, array $array2, array $_ = null) { }
print_r(array_intersect([1,2,3], [2,3,4]));
/*
Array
(
[1] => 2
[2] => 3
)
*/
数组差集
array_diff
// 差集 以左边数据为准
var_dump(array_diff([1,2,3,4,5], [1,2,3,4,5,6]));
/*
Array
(
)
*/
$a=array(0=>"Dog", 1=>"Cat", 2=>"Horse", 3=>"Bird");
$b=array(0=>"Tiger", 1=>"Lion");
// 把b数组中的元素一个个拿出来 拼接到 移除的位置
array_splice($a,0,1, $a); // 注意$a处是引用
print_r($a);
/*
Array
(
[0] => Tiger
[1] => Lion
[2] => Dog
[3] => Cat
[4] => Horse
[5] => Bird
)
*/
检测字符串编码
mb_detect_encoding + iconv/mb_convert_encoding
1. iconv ( string $in_charset , string $out_charset , string $str )
2. mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] )
// 采用mb_detect_encoding 可行就通过 不行就自己循环找
function my_detect_encoding($str, array $charsets=[]){
$encoding = mb_detect_encoding($str);
$tmp_charset = find_encoding($str, $encoding);
if ($tmp_charset){
return $tmp_charset;
}
if (!$charsets) $charsets = [ 'GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1' ];
foreach ($charsets as $charset) {
$tmp_charset = find_encoding($str, $charset);
if ($tmp_charset) {
return $tmp_charset;
} else {
return false;
}
}
};
function find_encoding($str, $encoding) {
$tmp_len1 = mb_strlen($str);
$tmp_len2 = mb_strlen(iconv($encoding, $encoding, $str));
if ($tmp_len1 === $tmp_len2) {
return $encoding;
} else {
return false;
}
}
error_reporting(E_ALL & ~E_NOTICE);
exec('dir', $a);
var_dump(my_detect_encoding($a[0]));
统计数组的value
array_count_values
array array_count_values ( array $array )
array_count_values()
随机数组(key)
array_rand
var_dump(array_rand(['a', 'b', 'c', 'd']))
字符串替换
str_replace
echo str_replace(['我', 's'], ['你', 'a'], 'www我sss').PHP_EOL; // www你aaa
echo str_replace(['我', 's'], ['你'], 'www我sss'); // www你
随机数
rand()/mt_rand()
int mt_rand ( int $min , int $max )
int rand ( int $min , int $max )不推荐使用