携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天 点击查看活动详情
前言
最近在做一些爬虫数据清洗的工作,需要做一个数据导出的管理后台,第一次使用PHP 和Hyperf里面的ORM来操作海量数据,有些繁琐,但是也从中学到了很多的东西。例如查询的优化,二位数组的排序,旋转操作,接下就总结一下常见的数组操作吧
在一个处理数据的PHP 文件下总共找到了5个关于数组处理的方法,下面来总结一下这5个方法。
array_search
作用是在数组中搜索某个键值,并返回对应的键名,如果没找到,则返回 false。有三个参数,第一个要搜索的键值,第二个为被搜索的元素, 使用示例:
<?php
$arr = ['Crazy', 'KFC'];
$res1 = array_search('KFC',$arr);
$res2 = array_search('V',$arr);
var_dump($res1,$res2);
// int(1)
// bool(false)
array_diff
返回两个数组的差集数组。用于比较两个(或更多个)数组的值,并返回差集,所以参数可以是多个,最少需要两个参数。
实际上这里有个坑需要总结一下,参数的顺序需要注意,返回的差集数组中包括了所有在被比较的第一个参数数组,并且不在第二个参数数组中,所以求差集的时候需要把尽可能多的元素的数组放在第一个参数中,不然就会返回false, 使用示例:
<?php
$arr1 = ['Crazy', 'KFC', 'V', 'me', '50'];
$arr2 = ['Crazy', 'KFC'];
$res1 = array_diff($arr1,$arr2);
$res2 = array_search($arr2,$arr1);
var_dump($res1,$res2);
// 结果:
array(3) {
[2]=>
string(1) "V"
[3]=>
string(2) "me"
[4]=>
string(2) "50"
}
bool(false)
array_column
返回输入数组的中某个单一列的值组成数组,一般使用在二维数组中,两个参数,第一个是待处理的数组,第二个是列的键名,使用实例:
<?php
$arr = [['name'=>'KFC','how'=>'Crazy'],['name'=>'me','how'=>'v 50']];
$res = array_column($arr,'name');
var_dump($res);
// 结果:
array(2) {
[0]=>
string(3) "KFC"
[1]=>
string(2) "me"
}
array_multisort
最少使用一个参数,传一个数组,就是最简单的排序,默认将数组的元素从小到大排序。
可以传第二个参数,将第一个参数中的数组进行升序或者降序排列。
但是在PHP中对数组进行简单排序会使用sort() 和rsort()函数,就不用传参数了。
array_multisort的用法就是使用其他更多的参数,进行自定义排序,先使用实战实例展示一下再讲解:
<?php
$arr = [['name'=>'KFC','time'=>'星期四'],['name'=>'MacDonald','time'=>'星期一']];
$timeArr = array_column($arr, 'time');
array_multisort($timeArr, SORT_ASC, $arr);
var_dump($arr);
//结果:
array(2) {
[0]=>
array(2) {
["name"]=>
string(9) "MacDonald"
["time"]=>
string(9) "星期一"
}
[1]=>
array(2) {
["name"]=>
string(3) "KFC"
["time"]=>
string(9) "星期四"
}
}
作用就是将二维数组以每一个元素中某一个键值顺序排序。
array_merge
把一个或多个数组合并为一个数组,如果要合并的数组中有相同的键名,则最后的元素会覆盖其他元素,实例:
<?php
$arr1 = ['Carzy', 'KFC'];
$arr2 = ['V', 'me', '50'];
$res = array_merge($arr1, $arr2);
var_dump($res);
// 结果:
array(5) {
[0]=>
string(5) "Carzy"
[1]=>
string(3) "KFC"
[2]=>
string(1) "V"
[3]=>
string(2) "me"
[4]=>
string(2) "50"
}
实际在不写键的时候,值不同的时候不会覆盖。值相同也不会被覆盖。这个方法通常会用到两个有多个元素的数组的合并!
总结
总结一下日常的开发工作,有些东西还是需要日常复习才注意到细节,不然会出现一些意外的问题。