Files
dafuweng-saiadmin6.x/server/plugin/saiadmin/utils/Arr.php
2026-03-03 10:06:12 +08:00

205 lines
5.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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 '';
}
}