PHP常用数组处理函数

函数代码

常用数组处理:ArrHelper

<?php

namespace App\Test;


class ArrHelper
{

    /**
     * 获取数组的指定key,可二维
     * @param $array
     * @param $keys
     * @return array
     */
    public static function only($array, $keys)
    {
        if (isset($array[0]) && is_array($array[0])) {
            $arr = [];
            foreach ($array as $key => $val) {
                $arr[] = array_intersect_key($val, array_flip((array)$keys));
            }
        } else {
            $arr = array_intersect_key($array, array_flip((array)$keys));
        }
        return $arr;
    }

    /**
     * 获取数组的指定key之外的,可二维
     * @param $array
     * @param $keys
     * @return array
     */
    public static function except($array, $keys)
    {
        if (isset($array[0]) && is_array($array[0])) {
            $arr = [];
            foreach ($array as $key => $val) {
                $arr[] = array_diff_key($val, array_flip((array)$keys));
            }
        } else {
            $arr = array_diff_key($array, array_flip((array)$keys));
        }
        return $arr;
    }

    /**
     * 获取第一个元素
     * @param $array
     * @return mixed
     */
    public static function first($array)
    {
        reset($array);
        return current($array);
    }

    /**
     * 获取最后一个元素
     * @param $array
     * @return mixed
     */
    public static function end($array)
    {
        $end = end($array);
        reset($array);
        return $end;
    }

    /**
     * isList
     * @param $array
     * @return bool
     */
    public static function isList($array)
    {
        $keys = array_keys($array);
        return $keys === array_keys($keys);
    }


    /**
     * 二维数组的指定列排序
     * @param $array
     * @param $field
     * @param int $asc
     * @return mixed
     */
    public static function sort($array, $field, $asc = 1)
    {
        usort($array, function ($a, $b) use ($field, $asc) {
            return $asc ? $a[$field] <=> $b[$field] : $b[$field] <=> $a[$field];
        });

        return $array;
    }

    /**
     * where条件筛选,仅可“=”
     * @param $array
     * @param $where
     * @param bool $strict
     * @return array
     */
    public static function where($array, $where, $strict = true)
    {
        $arr = [];
        foreach ($array as $key => $value) {
            $flag = true;
            foreach ($where as $field => $val) {
                if ($strict) {
                    if ($value[$field] !== $val) {
                        $flag = false;
                        break;
                    }
                } else {
                    if ($value[$field] <> $val) {
                        $flag = false;
                        break;
                    }
                }
            }
            if ($flag) {
                $arr[] = $value;
            }
        }

        return $arr;
    }

    /**
     * where条件筛选,仅可“=”
     * @param $array
     * @param $where
     * @param bool $strict
     * @return int
     */
    public static function count($array, $where, $strict = true)
    {
        return count(self::where($array, $where, $strict));
    }

    /**
     * 按指定列分组统计
     * @param $array
     * @param $field
     * @param bool $format
     * @return array
     */
    public static function groupCount($array, $field, $format = false)
    {
        $groupArr = array_values(array_unique(array_column($array, $field)));
        $arr = [];
        foreach ($array as $key => $value) {
            foreach ($groupArr as $v) {
                if ($value[$field] === $v) {
                    isset($arr[$v]) ? $arr[$v]++ : ($arr[$v] = 1);
                    break;
                }
            }
        }
        if ($format) {
            $tmpArr = [];
            foreach ($arr as $key => $val) {
                $tmpArr[] = [
                    'id' => $key,
                    'count' => $val,
                    'field' => $field,
                ];
            }
            $arr = $tmpArr;
        }

        return $arr;
    }

    /**
     * 按指定列分组
     * @param $array
     * @param $field
     * @return array
     */
    public static function groupBy($array, $field)
    {
        $groupArr = array_values(array_unique(array_column($array, $field)));
        $arr = [];
        foreach ($array as $key => $value) {
            foreach ($groupArr as $v) {
                if ($value[$field] === $v) {
                    isset($arr[$v]) ? array_push($arr[$v], $value) : ($arr[$v][] = $value);
                    break;
                }
            }
        }

        return $arr;
    }


    /**
     * 点语法
     * @param $arr
     * @param $keyName
     * @return mixed|null
     */
    public static function getArrDot(&$arr, $keyName)
    {
        $keys = explode('.', $keyName);
        foreach ($keys as $key) {
            if (!is_array($arr) || !array_key_exists($key, $arr)) {
                return null;
            }
            $arr = &$arr[$key];
        }

        return $arr;
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值