1.统计数组元素个数
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
|
$arr = array ( '1011,1003,1008,1001,1000,1004,1012' , '1009' , '1011,1003,1111' ); $result = array (); foreach ( $arr as $str ) { $str_arr = explode ( ',' , $str ); foreach ( $str_arr as $v ) { // $result[$v] = isset($result[$v]) ? $result[$v] : 0; // $result[$v] = $result[$v] + 1; $result [ $v ] = isset( $result [ $v ]) ? $result [ $v ]+1 : 1; } } print_r( $result ); //Array ( [1011] => 2 [1003] => 2 [1008] => 1 [1001] => 1 [1000] => 1 [1004] => 1 [1012] => 1 [1009] => 1 [1111] => 1 ) |
2. 循环删除目录
1
2
3
4
5
6
7
8
9
10
11
12
|
function cleanup_directory( $dir ) { foreach ( new DirectoryIterator( $dir ) as $file ) { if ( $file ->isDir()) { if (! $file ->isDot()) { cleanup_directory( $file ->getPathname()); } } else { unlink( $file ->getPathname()); } } rmdir ( $dir ); } |
3.无限极分类生成树
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
|
function generateTree( $items ){ $tree = array (); foreach ( $items as $item ){ if (isset( $items [ $item [ 'pid' ]])){ $items [ $item [ 'pid' ]][ 'son' ][] = & $items [ $item [ 'id' ]]; } else { $tree [] = & $items [ $item [ 'id' ]]; } } return $tree ; } function generateTree2( $items ){ foreach ( $items as $item ) $items [ $item [ 'pid' ]][ 'son' ][ $item [ 'id' ]] = & $items [ $item [ 'id' ]]; return isset( $items [0][ 'son' ]) ? $items [0][ 'son' ] : array (); } $items = array ( 1 => array ( 'id' => 1, 'pid' => 0, 'name' => '安徽省' ), 2 => array ( 'id' => 2, 'pid' => 0, 'name' => '浙江省' ), 3 => array ( 'id' => 3, 'pid' => 1, 'name' => '合肥市' ), 4 => array ( 'id' => 4, 'pid' => 3, 'name' => '长丰县' ), 5 => array ( 'id' => 5, 'pid' => 1, 'name' => '安庆市' ), ); print_r(generateTree( $items )); /** * 如何取数据格式化的树形数据 */ $tree = generateTree( $items ); function getTreeData( $tree ){ foreach ( $tree as $t ){ echo $t [ 'name' ]. '<br>' ; if (isset( $t [ 'son' ])){ getTreeData( $t [ 'son' ]); } } } |
4.数组排序 a - b 是数字数组写法 遇到字符串的时候就要
1
2
3
4
5
6
7
8
9
10
11
12
|
var test = [ 'ab' , 'ac' , 'bd' , 'bc' ]; test.sort( function (a, b) { if (a < b) { return -1; } if (a > b) { return 1; } return 0; }); |
5.array_reduce
1
2
3
4
5
6
7
8
|
$raw = [1,2,3,4,5,]; // array_reduce 的第三个参数是 $result 的初始值 array_reduce ( $raw , function ( $result , $value ) { $result [ $value ] = $value ; return $result ; }, []); // [1 => 1, 2 => 2, ... 5 => 5] |
6.array_map 闭包中只接受一个或者多个参数,闭包的参数数量和 array_map 本身的参数数量必须一致
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$input = [ 'key' => 'value' ]; array_map ( function ( $key , $value ) { echo $key . $value ; }, array_keys ( $input ), $input ) // 'keyvalue' $double = function ( $item ) { return 2 * $item ; } $result = array_map ( $double , [1,2,3]); // 2 4 6 |
7.繁殖兔子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$month = 12; $fab = array (); $fab [0] = 1; $fab [1] = 1; for ( $i = 2; $i < $month ; $i ++) { $fab [ $i ] = $fab [ $i - 1] + $fab [ $i - 2]; } for ( $i = 0; $i < $month ; $i ++) { echo sprintf( "第{%d}个月兔子为:{%d}" , $i , $fab [ $i ]). "<br/>" ; } |
8 .datetime
1
2
3
4
5
6
7
8
9
|
function getCurMonthFirstDay( $date ) { return date ( 'Y-m-01' , strtotime ( $date )); } getCurMonthLastDay( '2015-07-23' ) function getCurMonthLastDay( $date ) { return date ( 'Y-m-d' , strtotime ( date ( 'Y-m-01' , strtotime ( $date )) . ' +1 month -1 day' )); } |
9.加密解密
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
|
function encrypt( $data , $key ) { $key = md5( $key ); $x = 0; $len = strlen ( $data ); $l = strlen ( $key ); $char = '' ; for ( $i = 0; $i < $len ; $i ++) { if ( $x == $l ) { $x = 0; } $char .= $key { $x }; $x ++; } $str = '' ; for ( $i = 0; $i < $len ; $i ++) { $str .= chr (ord( $data { $i }) + (ord( $char { $i })) % 256); } return base64_encode ( $str ); } function decrypt( $data , $key ) { $key = md5( $key ); $x = 0; $data = base64_decode ( $data ); $len = strlen ( $data ); $l = strlen ( $key ); $char = '' ; for ( $i = 0; $i < $len ; $i ++) { if ( $x == $l ) { $x = 0; } $char .= substr ( $key , $x , 1); $x ++; } $str = '' ; for ( $i = 0; $i < $len ; $i ++) { if (ord( substr ( $data , $i , 1)) < ord( substr ( $char , $i , 1))) { $str .= chr ((ord( substr ( $data , $i , 1)) + 256) - ord( substr ( $char , $i , 1))); } else { $str .= chr (ord( substr ( $data , $i , 1)) - ord( substr ( $char , $i , 1))); } } return $str ; } |
10 . 多维数组降级
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
|
function array_flatten( $arr ) { $result = []; array_walk_recursive ( $arr , function ( $value ) use (& $result ) { $result [] = $value ; }); return $result ; } print_r(array_flatten([1,[2,3],[4,5]])); // [1,[2,3],[4,5]] => [1,2,3,4,5] // var new_array = old_array.concat(value1[, value2[, ...[, valueN]]]) var test = [1,2,3,[4,5,6],[7,8]]; [].concat.apply([], test); // [1,2,3,4,5,6,7,8] 对于 test 数组中的每一个 value, 将它 concat 到空数组 [] 中去,而因为 concat 是 Array 的 prototype,所以我们用一个空 array 作载体 var test1 = [1,2,[3,[4,[5]]]]; function flatten(arr) { return arr.reduce( function (pre, cur) { if (Array.isArray(cur)) { return flatten(pre.concat(cur)); } return pre.concat(cur); }, []); } // [1,2,3,4,5] json_encode中文 function json_encode_wrapper ( $result ) { if (defined( 'JSON_UNESCAPED_UNICODE' )){ return json_encode( $result ,JSON_UNESCAPED_UNICODE|JSON_NUMERIC_CHECK); } else { return preg_replace( array ( "#\\\u([0-9a-f][0-9a-f][0-9a-f][0-9a-f])#ie" , "/\"(\d+)\"/" ,), array ( "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))" , "\\1" ), json_encode( $result ) ); } } |
12.二维数组去重
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
|
$arr = array ( array ( 'id' => '2' , 'title' => '...' , 'ding' => '1' , 'jing' => '1' , 'time' => '...' , 'url' => '...' , 'dj' => '...' ), array ( 'id' => '2' , 'title' => '...' , 'ding' => '1' , 'jing' => '1' , 'time' => '...' , 'url' => '...' , 'dj' => '...' ) ); function about_unique( $arr = array ()){ /*将该种二维数组看成一维数组,则 该一维数组的value值有相同的则干掉只留一个,并将该一维 数组用重排后的索引数组返回,而返回的一维数组中的每个元素都是 原始key值形成的关联数组 */ $keys = array (); $temp = array (); foreach ( $arr [0] as $k => $arrays ) { /*数组记录下关联数组的key值*/ $keys [] = $k ; } //return $keys; /*降维*/ foreach ( $arr as $k => $v ) { $v = join( "," , $v ); //降维 $temp [] = $v ; } $temp = array_unique ( $temp ); //去掉重复的内容 foreach ( $temp as $k => $v ){ /*再将拆开的数组按索引数组重新组装*/ $temp [ $k ] = explode ( "," , $v ); } //return $temp; /*再将拆开的数组按关联数组key值重新组装*/ foreach ( $temp as $k => $v ) { foreach ( $v as $kkk => $ck ) { $data [ $k ][ $keys [ $kkk ]] = $temp [ $k ][ $kkk ]; } } return $data ; } |
13.格式化字节大小
1
2
3
4
5
6
7
8
9
10
11
12
|
/** * 格式化字节大小 * @param number $size 字节数 * @param string $delimiter 数字和单位分隔符 * @return string 格式化后的带单位的大小 * @author */ function format_bytes( $size , $delimiter = '' ) { $units = array ( 'B' , 'KB' , 'MB' , 'GB' , 'TB' , 'PB' ); for ( $i = 0; $size >= 1024 && $i < 6; $i ++) $size /= 1024; return round ( $size , 2) . $delimiter . $units [ $i ]; } |
14.3分钟前
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
|
/** * 将指定时间戳转换为截止当前的xx时间前的格式 例如 return '3分钟前'' * @param string|int $timestamp unix时间戳 * @return string */ function time_ago( $timestamp ) { $etime = time() - $timestamp ; if ( $etime < 1) return '刚刚' ; $interval = array ( 12 * 30 * 24 * 60 * 60 => '年前 (' . date ( 'Y-m-d' , $timestamp ). ')' , 30 * 24 * 60 * 60 => '个月前 (' . date ( 'm-d' , $timestamp ). ')' , 7 * 24 * 60 * 60 => '周前 (' . date ( 'm-d' , $timestamp ). ')' , 24 * 60 * 60 => '天前' , 60 * 60 => '小时前' , 60 => '分钟前' , 1 => '秒前' ); foreach ( $interval as $secs => $str ) { $d = $etime / $secs ; if ( $d >= 1) { $r = round ( $d ); return $r . $str ; } }; } |
15.身份证号
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
|
/** * 判断参数字符串是否为天朝身份证号 * @param $id 需要被判断的字符串或数字 * @return mixed false 或 array[有内容的array boolean为真] */ function is_citizen_id( $id ) { //长度效验 18位身份证中的X为大写 $id = strtoupper ( $id ); if (!(preg_match( '/^\d{17}(\d|X)$/' , $id ) || preg_match( '/^\d{15}$/' , $id ))) { return false; } //15位老号码转换为18位 并转换成字符串 $Wi = array (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1); $Ai = array ( '1' , '0' , 'X' , '9' , '8' , '7' , '6' , '5' , '4' , '3' , '2' ); $cardNoSum = 0; if ( strlen ( $id )==16) { $id = substr (0, 6). '19' . substr (6, 9); for ( $i = 0; $i < 17; $i ++) { $cardNoSum += substr ( $id , $i ,1) * $Wi [ $i ]; } $seq = $cardNoSum % 11; $id = $id . $Ai [ $seq ]; } //效验18位身份证最后一位字符的合法性 $cardNoSum = 0; $id17 = substr ( $id ,0,17); $lastString = substr ( $id ,17,1); for ( $i = 0; $i < 17; $i ++) { $cardNoSum += substr ( $id , $i ,1) * $Wi [ $i ]; } $seq = $cardNoSum % 11; $realString = $Ai [ $seq ]; if ( $lastString != $realString ) { return false;} //地域效验 $oCity = array (11=> "北京" ,12=> "天津" ,13=> "河北" ,14=> "山西" ,15=> "内蒙古" ,21=> "辽宁" ,22=> "吉林" ,23=> "黑龙江" ,31=> "上海" ,32=> "江苏" ,33=> "浙江" ,34=> "安徽" ,35=> "福建" ,36=> "江西" ,37=> "山东" ,41=> "河南" ,42=> "湖北" ,43=> "湖南" ,44=> "广东" ,45=> "广西" ,46=> "海南" ,50=> "重庆" ,51=> "四川" ,52=> "贵州" ,53=> "云南" ,54=> "西藏" ,61=> "陕西" ,62=> "甘肃" ,63=> "青海" ,64=> "宁夏" ,65=> "新疆" ,71=> "台湾" ,81=> "香港" ,82=> "澳门" ,91=> "国外" ); $City = substr ( $id , 0, 2); $BirthYear = substr ( $id , 6, 4); $BirthMonth = substr ( $id , 10, 2); $BirthDay = substr ( $id , 12, 2); $Sex = substr ( $id , 16,1) % 2 ; //男1 女0 //$Sexcn = $Sex?'男':'女'; //地域验证 if ( is_null ( $oCity [ $City ])) { return false;} //出生日期效验 if ( $BirthYear >2078 || $BirthYear <1900) { return false;} $RealDate = strtotime ( $BirthYear . '-' . $BirthMonth . '-' . $BirthDay ); if ( date ( 'Y' , $RealDate )!= $BirthYear || date ( 'm' , $RealDate )!= $BirthMonth || date ( 'd' , $RealDate )!= $BirthDay ) { return false; } return array ( 'id' => $id , 'location' => $oCity [ $City ], 'Y' => $BirthYear , 'm' => $BirthMonth , 'd' => $BirthDay , 'sex' => $Sex ); } |
16.获取二维数组中某个key的集合
1
2
3
4
|
$user = array ( 0 => array ( 'id' => 1, 'name' => '张三' , 'email' => 'zhangsan@sina.com' , ), 1 => array ( 'id' => 2, 'name' => '李四' , 'email' => 'lisi@163.com' , ), 2 => array ( 'id' => 5, 'name' => '王五' , 'email' => '10000@qq.com' , ), ...... ); $ids = array (); $ids = array_map ( 'array_shift' , $user ); $ids = array_column( $user , 'id' ); //php5.5 $names = array (); $names = array_reduce ( $user , create_function( '$v,$w' , '$v[$w["id"]]=$w["name"];return $v;' )); |
以上所述就是本文的全部内容了,希望大家能够喜欢。