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;' ));
|
以上所述就是本文的全部内容了,希望大家能够喜欢。