2
0

helpers_array.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. if (!function_exists('array_flatten')) {
  3. /**
  4. * @param array $array
  5. * @return array
  6. */
  7. function array_flatten(array $array): array
  8. {
  9. $result = [];
  10. foreach ($array as $key => $value) {
  11. if (is_array($value)) {
  12. $result = array_merge($result, array_flatten($value));
  13. continue;
  14. }
  15. $result[$key] = $value;
  16. }
  17. return $result;
  18. }
  19. }
  20. if (!function_exists('array_dot')) {
  21. /**
  22. * Flatten a multi-dimensional associative array with dots.
  23. *
  24. * @param array $array The array to flatten.
  25. * @param string $rootKey The base key prefix (used internally for recursion).
  26. * @return array The flattened array with dot notation keys.
  27. */
  28. function array_dot(array $array, string $rootKey = ''): array
  29. {
  30. $result = [];
  31. foreach ($array as $key => $value) {
  32. $key = strval($key);
  33. $key = $rootKey !== '' ? ($rootKey . '.' . $key) : $key;
  34. if (is_array($value)) {
  35. $result = $result + array_dot($value, $key);
  36. continue;
  37. }
  38. $result[$key] = $value;
  39. }
  40. return $result;
  41. }
  42. }
  43. if (!function_exists('array_group_by')) {
  44. /**
  45. * @param array $array
  46. * @param string $key
  47. * @return array
  48. */
  49. function array_group_by(array $array, string $key): array
  50. {
  51. $result = [];
  52. foreach ($array as $value) {
  53. $group = $value;
  54. if (is_array($value)) {
  55. $group = $value[$key];
  56. } elseif (is_object($value)) {
  57. $group = $value->$key;
  58. }
  59. $result[$group][] = $value;
  60. }
  61. return $result;
  62. }
  63. }