Arr.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace crmeb\utils;
  12. /**
  13. * 操作数组帮助类
  14. * Class Arr
  15. * @package crmeb\utils
  16. */
  17. class Arr
  18. {
  19. /**
  20. * 对数组增加默认值
  21. * @param array $keys
  22. * @param array $configList
  23. * @return array
  24. */
  25. public static function getDefaultValue(array $keys, array $configList = [])
  26. {
  27. $value = [];
  28. foreach ($keys as $val) {
  29. if (is_array($val)) {
  30. $k = $val[0] ?? '';
  31. $v = $val[1] ?? '';
  32. } else {
  33. $k = $val;
  34. $v = '';
  35. }
  36. $value[$k] = $configList[$k] ?? $v;
  37. }
  38. return $value;
  39. }
  40. /**
  41. * 获取ivew菜单列表
  42. * @param array $data
  43. * @return array
  44. */
  45. public static function getMenuIviewList(array $data)
  46. {
  47. return Arr::toIviewUi(Arr::getTree($data));
  48. }
  49. /**
  50. * 转化iviewUi需要的key值
  51. * @param $data
  52. * @return array
  53. */
  54. public static function toIviewUi($data)
  55. {
  56. $newData = [];
  57. foreach ($data as $k => $v) {
  58. $temp = [];
  59. $temp['id'] = $v['id'];
  60. $temp['pid'] = $v['pid'];
  61. $temp['path'] = $v['menu_path'];
  62. $temp['title'] = $v['menu_name'];
  63. $temp['icon'] = $v['icon'];
  64. $temp['header'] = $v['header'];
  65. $temp['is_header'] = $v['is_header'];
  66. $temp['is_show'] = $v['is_show_path'];
  67. if ($v['is_show_path']) {
  68. $temp['auth'] = ['hidden'];
  69. }
  70. if (!empty($v['children'])) {
  71. $temp['children'] = self::toIviewUi($v['children']);
  72. }
  73. $newData[] = $temp;
  74. }
  75. return $newData;
  76. }
  77. /**
  78. * 获取树型菜单
  79. * @param $data
  80. * @param int $pid
  81. * @param int $level
  82. * @return array
  83. */
  84. public static function getTree($data, $pid = 0, $level = 1)
  85. {
  86. $childs = self::getChild($data, $pid, $level);
  87. $dataSort = array_column($childs, 'sort');
  88. array_multisort($dataSort, SORT_DESC, $childs);
  89. foreach ($childs as $key => $navItem) {
  90. $resChild = self::getTree($data, $navItem['id']);
  91. if (null != $resChild) {
  92. $childs[$key]['children'] = $resChild;
  93. }
  94. }
  95. return $childs;
  96. }
  97. /**
  98. * 获取子菜单
  99. * @param $arr
  100. * @param $id
  101. * @param $lev
  102. * @return array
  103. */
  104. private static function getChild(&$arr, $id, $lev)
  105. {
  106. $child = [];
  107. foreach ($arr as $value) {
  108. if ($value['pid'] == $id) {
  109. $value['level'] = $lev;
  110. $child[] = $value;
  111. }
  112. }
  113. return $child;
  114. }
  115. /**
  116. * 格式化数据
  117. * @param array $array
  118. * @param $value
  119. * @param int $default
  120. * @return mixed
  121. */
  122. public static function setValeTime(array $array, $value, $default = 0)
  123. {
  124. foreach ($array as $item) {
  125. if (!isset($value[$item]))
  126. $value[$item] = $default;
  127. else if (is_string($value[$item]))
  128. $value[$item] = (float)$value[$item];
  129. }
  130. return $value;
  131. }
  132. /**
  133. * 获取二维数组中某个值的集合重新组成数组,并判断数组中的每一项是否为真
  134. * @param array $data
  135. * @param string $filed
  136. * @return array
  137. */
  138. public static function getArrayFilterValeu(array $data, string $filed)
  139. {
  140. return array_filter(array_unique(array_column($data, $filed)), function ($item) {
  141. if ($item) {
  142. return $item;
  143. }
  144. });
  145. }
  146. /**
  147. * 数组转字符串去重复
  148. * @param array $data
  149. * @return false|string[]
  150. */
  151. public static function unique(array $data)
  152. {
  153. return array_unique(explode(',', implode(',', $data)));
  154. }
  155. /**
  156. * 获取数组中去重复过后的指定key值
  157. * @param array $list
  158. * @param string $key
  159. * @return array
  160. */
  161. public static function getUniqueKey(array $list, string $key)
  162. {
  163. return array_unique(array_column($list, $key));
  164. }
  165. /**
  166. * 获取数组中随机值
  167. * @param array $data
  168. * @return bool|mixed
  169. */
  170. public static function getArrayRandKey(array $data)
  171. {
  172. if (!$data) {
  173. return false;
  174. }
  175. $mun = rand(0, count($data));
  176. if (!isset($data[$mun])) {
  177. return self::getArrayRandKey($data);
  178. }
  179. return $data[$mun];
  180. }
  181. }