PHP数组操作的一些方法记录

点击了解 CRMEB多商户 其他开源项目源码 :了解更多小姐姐二维码
在这里插入图片描述

  1. 提取数组中仅需要的字段
/**
 * @todo 
 * @param array $data 需要处理的数组
 * @param array $filter 具体字段
 * @return array
 */
public function allowParams($data, $allows)
{
    return array_intersect_key($data, array_flip($allows));
}
  1. 二维数组排序
/**
 * @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));
  1. 递归处理数组中的null值
function getArrayTree($input)
{
    foreach ($input as &$value) {
        if (is_array($value))
            $value = getArrayTree($value);
    }
    return array_map(function ($v) {
        return isnull($v) ?? '';
    }, $input);
}
  1. 对数组实现去除空元素 排重 按值从大到小排序 重新建立数字索引
array_values(rsort(array_unique(array_filter($arr))))
  1. 对二维数组按照 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'));
  1. 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"
}
  1. 二维数组比较是否相等
/**
 * 两个二维数组比较是否相等
 * @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;
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值