道者编程

php一些实用小众的用法

1:array_filter //回调函数过滤数组元素,默认过滤空值

改方法常用于语过滤数组空值,但有个问题,如果数组元素有0的话,也会被过滤掉。

<?php

$arr = [
    'name'=>'liling',
    'sex' =>'男',
    'phone' =>'',
    'age' =>'0'
];

$arr = array_filter($arr);
print_r($arr);

以上输出: Array ( [name] => liling [sex] => 男 ) 过滤掉了 age 0.

你如果我们要过滤空值,但不过滤 0 怎么办?手册上有介绍,可以用回调来实现:

<?php

$arr = [
    'name'=>'liling',
    'sex' =>'男',
    'phone' =>'',
    'age' =>'0'
];

$params = array_filter($arr,function($back){
        if($back == '' || $back === null){ //只过滤指定的情况
            return false;
        }
        return true;
    });
print_r($params);
 输出:Array ( [name] => liling [sex] => 男 [age] => 0 )


2:array_multisort //数组排序,默认升序
 一般我们这样用
<?php
$arr = [1,3,7,9,5];
array_multisort ($arr);
print_r($arr);

 升序:Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 )

<?php

$arr = [1,3,7,9,5];
array_multisort ($arr,SORT_DESC); //降序
print_r($arr);

 降序:Array ( [0] => 9 [1] => 7 [2] => 5 [3] => 3 [4] => 1 )

一维数组很简单,那么多维数组怎么办?比如二维

<?php

$arr = [
    [
        'name'=>'li',
        'time'=>'2021-01-02'
    ],
    [
        'name'=>'chen',
        'time'=>'2021-03-02'
    ],
    [
        'name'=>'zao',
        'time'=>'2021-02-12'
    ],
];

$sort = array_column($arr,'time'); //把time单独取出来,生成一个一维数组
array_multisort($sort ,SORT_DESC,$arr); // 然后按照时间降序

print_r($arr);
 
Array
 (
 [0] => Array
 (
 [name] => chen
 [time] => 2021-03-02
 )
  
 [1] => Array
 (
 [name] => zao
 [time] => 2021-02-12
 )
  
 [2] => Array
 (
 [name] => li
 [time] => 2021-01-02
 )
  
 )

3:rtrim($url,"\/\\\t\n\r\0\x0B").'/'; 删除拼接地址后面的符号,这里一定不能用单引号
 rtrim()函数用于删除字符串末尾的指定字符。在给定的示例中,rtrim($str,'\/\\\t\n\r\0\x0B')将删除字符串末尾的斜杠(/),反斜杠(\),制表符(\t),换行符(\n),回车符(\r),空字符(\0)和垂直制表符(\x0B)。然后,通过在字符串末尾加上一个斜杠(/),确保字符串以斜杠结尾。确保URL结尾的斜杠一致,以避免链接问题。



最新评论:
我要评论:

看不清楚