205 lines
5.6 KiB
PHP
205 lines
5.6 KiB
PHP
<?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 '';
|
||
}
|
||
|
||
}
|