PHP函数\方法记录

1、数组合并

数组合并一般使用array_merage,但是当合并两个键是数字的数组时,数组的数字索引将会被重置,有时候会引起不便。想要保留数字键值,使用+合并数组

$arr1 = ['13'=>'1166','14'=>'1889'];
$arr2 = ['1'=>'1236','5'=>'1891'];
$arr = $arr1+$arr2;

array_merge合并数组后,键是数字的值,键会从0开始往后排。合并数组时,键名不是数字且键名相同的值,后面数组的值会覆盖前面数组的该值;键名是数字且相等的值,不覆盖前面的值,往后排。

+合并数组后,键是数字的值,保留自身的键。合并数组时,键名相同的值(不分数字或字符串),前面数组的覆盖后面数组中的该值。

使用+的这一特性,我们可以快速实现两个数组的合并去重,如下

先翻转两个数组,然后使用+合并数组,去除两个数组中的重复值,再用array_keys获取值
array_keys(array_flip($user_arr_1)+  array_flip($user_arr_2));
2、二维数组排序
$arr = [
		['name'=>'张三','age'=>'15','h'=>'120'],
		['name'=>'李四','age'=>'11','h'=>'121'],
		['name'=>'王五','age'=>'4','h'=>'122'],
		['name'=>'赵六','age'=>'11','h'=>'123'],
	];

	$sort_arr1 = array_column($arr,'age');
	$sort_arr2 = array_column($arr,'h');
	//按age顺序排序
	array_multisort($sort_arr1,SORT_ASC,$arr);
	//先按age顺序排序,age相同的再按h倒叙排序
	array_multisort($sort_arr1,SORT_ASC,$sort_arr2,SORT_DESC,$arr);
3、 在类外部修改类的私有属性
class aa{
	private $bb = 'fkkyy';
	
	public function __get($name){
		return $this->bb;
	}
}
$class = new aa();
echo $class->cc;

在这个类中,我们通过get把bb的值赋给了cc,输出了:fkkyy。这个时候我们想要把bb的值修改一下,在原来有代码中,我们只能直接在类中修改。
想在类外修改的话,我们需要用到 Closure::bind(),把类的作用域绑定到一个匿名函数上,然后再匿名函数内修改bb的值即可

class aa{
	private $bb = 'fkkyy';
	
	public function __get($name){
		return $this->bb;
	}

}

$class = new aa();
$func = \Closure::bind(function(){$this->bb='fuck you';}, $class,'aa');
$func();
echo $class->cc;

成功输出:fuck you

4、 get_class 和 get_called_class的区别

get_class :获取定义当前方法的类名
get_called_class:获取正在调用当前方法的类名

5、assert断言和if判断的区别

assert(1==2);断言失败后直接报错
if(1 == 2){};判断不符合,不影响后续代码执行

6、获得指定月份的开始和结束时间戳
$time = '2018-05';

$timebegin = strtotime($time) ; //开始时间戳

$day = date('t',$timebegin);

$timeend = $timebegin + 86400 * $day  - 1; //结束时间戳
7、获取两个数组的差异值

原始数组 [1,2,3,4,5],数组经过修改后,变为 [4,5,6,7,8]
想要获取数组变动后,哪些值是删除的值,哪些值是增加的值
传统做法是进行双层遍历,数组为空时,还要做特殊判读,代码较长
我们可以使用php的两个函数,使用三行代码得到变动的结果,如下

$a = [1,2,3,4,5];
$b = [4,5,6,7,8];
//首先获取两个数组的交集
$intersect = array_intersect($a,$b);
//数组a和交集取差集,a里有但是交集没有的值,说明是被减掉的值
$dec = array_diff($a,$intersect);
//数组b和交集取差集,b里有但是交集没有的值,说明是新增的值
$inc = array_diff($b,$intersect);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值