diff --git a/utils/app.go b/utils/app.go index fe43201..db93932 100644 --- a/utils/app.go +++ b/utils/app.go @@ -73,6 +73,7 @@ func init() { Map.WithoutField = MapWithoutField[map[string]any] Version.Go = VersionGo Version.Compare = VersionCompare + Unity.Ids = UnityIds } var Is struct { @@ -187,3 +188,7 @@ var Version struct { Go func() (version string) Compare func(v1 any, v2 any) (result int) } + +var Unity struct { + Ids func(param ...any) (result []any) +} diff --git a/utils/unity.go b/utils/unity.go new file mode 100644 index 0000000..d7fe5fb --- /dev/null +++ b/utils/unity.go @@ -0,0 +1,33 @@ +package utils + +import ( + "github.com/spf13/cast" + "regexp" +) + +// UnityIds 参数归一化 +func UnityIds(param ...any) (ids []any) { + + fn := func(param any) (ids []any) { + if GetType(param) == "string" { + // 正则提取数字部分 + item := regexp.MustCompile(`\d+`).FindAllString(cast.ToString(param), -1) + for _, val := range item { + ids = append(ids, cast.ToInt(val)) + } + } + if GetType(param) == "slice" { + item := cast.ToStringSlice(param) + for _, val := range item { + ids = append(ids, cast.ToInt(val)) + } + } + return ids + } + + for _, val := range param { + ids = append(ids, fn(val)...) + } + + return ArrayUnique(ArrayEmpty(ids)) +}