| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- <?php
- // +----------------------------------------------------------------------
- // | saiadmin [ saiadmin快速开发框架 ]
- // +----------------------------------------------------------------------
- // | Author: sai <1430792918@qq.com>
- // +----------------------------------------------------------------------
- namespace plugin\saiadmin\utils;
- /**
- * Array操作类
- * Class Arr
- */
- class Arr
- {
- /**
- * 获取数组中指定的列
- * @param array $source
- * @param string $column
- * @return array
- */
- public static function getArrayColumn($source, $column): array
- {
- $columnArr = [];
- foreach ($source as $item) {
- $columnArr[] = $item[$column];
- }
- return $columnArr;
- }
- /**
- * 批量获取数组中指定的列
- * @param array $source
- * @param array $column
- * @return array
- */
- public static function getArrayColumns($source, $columns): array
- {
- $columnArr = [];
- foreach ($source as $item) {
- $tempArr = [];
- foreach ($columns as $key) {
- $temp = explode('.', $key);
- if (count($temp) > 1) {
- $tempArr[$key] = $item[$temp[0]][$temp[1]];
- } else {
- $tempArr[$key] = $item[$key];
- }
- }
- $columnArr[] = $tempArr;
- }
- return $columnArr;
- }
- /**
- * 把二维数组中某列设置为key返回
- * @param array $array 输入数组
- * @param string $field 要作为键的字段名
- * @param bool $unique 要做键的字段是否唯一(该字段与记录是否一一对应)
- * @return array
- */
- public static function fieldAsKey($array, $field, $unique = false) {
- $result = [];
- foreach ($array as $item) {
- if (isset($item[$field])) {
- if (!$unique && isset($result[$item[$field]])) {
- $unique = true;
- $result[$item[$field]] = [($result[$item[$field]])];
- $result[$item[$field]][] = $item;
- } elseif ($unique) {
- $result[$item[$field]][] = $item;
- } else {
- $result[$item[$field]] = $item;
- }
- }
- }
- return $result;
- }
- /**
- * 数组转字符串去重复
- * @param array $data
- * @return false|string[]
- */
- public static function unique(array $data)
- {
- return array_unique(explode(',', implode(',', $data)));
- }
- /**
- * 获取数组中去重复过后的指定key值
- * @param array $list
- * @param string $key
- * @return array
- */
- public static function getUniqueKey(array $list, string $key)
- {
- return array_unique(array_column($list, $key));
- }
- /**
- * 合并二维数组,并且指定key去重, 第一个覆盖第二个
- * @param array $arr1
- * @param array $arr2
- * @param string $key
- * @return array
- */
- public static function mergeArray(array $arr1, array $arr2, string $key)
- {
- $arr = array_merge($arr1,$arr2);
- $tmp_arr = [];
- foreach($arr as $k => $v) {
- if(in_array($v[$key], $tmp_arr)) {
- unset($arr[$k]);
- } else {
- $tmp_arr[] = $v[$key];
- }
- }
- return $arr;
- }
- /**
- * 相同键值的合并作为键生成新数组
- * @param array $data
- * @param string $field
- * @return array
- */
- public static function groupSameField(array $data, string $field)
- {
- $result= [];
- foreach ($data as $key => $info) {
- $result[$info[$field]][] = $info;
- }
- return $result;
- }
- /**
- * 生成无限级树算法
- * @param array $arr 输入数组
- * @param number $pid 根级的pid
- * @param string $column_name 列名,id|pid父id的名字|children子数组的键名
- * @return array $ret
- */
- public static function makeTree($arr, $pid = 0, $column_name = 'id|pid|children') {
- list($idname, $pidname, $cldname) = explode('|', $column_name);
- $ret = array();
- foreach ($arr as $k => $v) {
- if ($v [$pidname] == $pid) {
- $tmp = $arr [$k];
- unset($arr [$k]);
- $tmp [$cldname] = self::makeTree($arr, $v [$idname], $column_name);
- $ret [] = $tmp;
- }
- }
- return $ret;
- }
- /**
- * 二位数组按某个键值排序
- * @param array $arr
- * @param string $key
- * @param int $sort
- * @return array
- */
- public static function sortArray($arr, $key, $sort = SORT_ASC)
- {
- array_multisort(array_column($arr,$key),$sort,$arr);
- return $arr;
- }
- /**
- * 数组中根据某一列中某个字段的值来查询这一列数据
- * @param $array
- * @param $column
- * @param $value
- * @return array
- */
- public static function getArrayByColumn($array, $column, $value): array
- {
- $result = [];
- foreach ($array as $key => $item) {
- if ($item[$column] == $value) {
- $result = $item;
- }
- }
- return $result;
- }
- /**
- * 数组中根据key值获取value
- * @param $array
- * @param $key
- * @return mixed|string
- */
- public static function getConfigValue($array, $key)
- {
- foreach ($array as $item) {
- if ($item['key'] === $key) {
- return $item['value'];
- }
- }
- return '';
- }
- }
|