点击了解 CRMEB多商户 其他开源项目源码 :了解更多小姐姐二维码
- 提取数组中仅需要的字段
/**
* @todo
* @param array $data 需要处理的数组
* @param array $filter 具体字段
* @return array
*/
public function allowParams($data, $allows)
{
return array_intersect_key($data, array_flip($allows));
}
- 二维数组排序
/**
* @todo
* @param array $multi_array 需要排序的数组
* @param array $sort_key 按$sort_key字段排序
* @param array $sort 排序方式
* @return array
*/
function multiArraySort($multi_array, $sort_key, $sort = SORT_DESC)
{
if(is_array($multi_array)){
foreach($multi_array as $row){
if(is_array($row)){
$key_arr[] = $row[$sort_key];
}else{
return false;
}
}
}else{
return false;
}
array_multisort($key_arr, $sort, $multi_array);
return $multi_array;
}
$arr = [
[
'sort' => 3,
'a' => 'a',
'b' => 'b',
],
[
'sort' => 5,
'a' => 'c',
'b' => 'd',
],
];
var_dump(multiArraySort($arr, 'a', SORT_ASC));
- 递归处理数组中的null值
function getArrayTree($input)
{
foreach ($input as &$value) {
if (is_array($value))
$value = getArrayTree($value);
}
return array_map(function ($v) {
return isnull($v) ?? '';
}, $input);
}
- 对数组实现去除空元素 排重 按值从大到小排序 重新建立数字索引
array_values(rsort(array_unique(array_filter($arr))))
- 对二维数组按照 title+pubscore 去重
function uniqueByKey($arr, $key1,$key2) {
$tmp_key = [];
foreach ($arr as $key => $item) {
if ( in_array($item[$key1].$item[$key2], $tmp_key) ) {
unset($arr[$key]);
} else {
$tmp_key[] = $item[$key1].$item[$key2];
}
}
return $arr;
}
//使用示例:
$arr = array(
array('id' => 1, 'title' => 'a','pubscore'=>1),
array('id' => 2, 'title' => 'a','pubscore'=>1),
array('id' => 3, 'title' => 'b','pubscore'=>2),
array('id' => 4, 'title' => 'c','pubscore'=>3),
array('id' => 5, 'title' => 'd','pubscore'=>3),
);
print_r(uniqueByKey($arr,'title','num'));
- list 用法
list — 把数组中的值赋给一组变量
$info = array('a', 'b', 'c');
list($a[0], $a[1], $a[2]) = $info;
var_dump($a);
array(3) {
[0]=>
string(6) "a"
[1]=>
string(5) "b"
[2]=>
string(8) "c"
}
- 二维数组比较是否相等
/**
* 两个二维数组比较是否相等
* @param array $arr1 数组1
* @param array $arr2 数组2
* @param string $keys 比较的键名
* @return bool
*/
function arrayEqual($arr1, $arr2, ...$keys)
{
if (count($arr1) <> count($arr2)) {
return false;
}
foreach ($arr1 as $k => $v) {
foreach ($keys as $key) {
if (!isset($v[$key]) || !isset($arr2[$k][$key])) return false;
if ($v[$key] != $arr2[$k][$key]) {
return false;
}
}
}
return true;
}