Format.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace Heanup\Frame\Helper;
  3. /**
  4. * 格式转换
  5. */
  6. class Format extends \Heanup\Frame\Helper
  7. {
  8. /**
  9. * @hack 转换数字类型到字符串
  10. * @param $data
  11. * @return mixed
  12. */
  13. public static function convertNumberToString($data)
  14. {
  15. if (is_array($data)) {
  16. foreach ($data as $k => $v) {
  17. if (is_array($v)) {
  18. $data[$k] = self::convertNumberToString($v);
  19. } else if (is_numeric($v)) {
  20. $data[$k] = (string)$v;
  21. }
  22. }
  23. } else if (is_numeric($data)) {
  24. $data = (string)$data;
  25. }
  26. return $data;
  27. }
  28. /**
  29. * Json数据格式化,拷贝自网上
  30. * @param Mixed $data 数据
  31. * @param String $indent 缩进字符,默认4个空格
  32. * @return JSON
  33. */
  34. public static function jsonFormat($data, $indent = null)
  35. {
  36. // 对数组中每个元素递归进行url_encode操作,保护中文字符
  37. array_walk_recursive($data, 'self::jsonFormatProtect');
  38. // json encode
  39. $data = json_encode($data);
  40. // 将url_encode的内容进行url_decode
  41. $data = urldecode($data);
  42. // 缩进处理
  43. $ret = '';
  44. $pos = 0;
  45. $length = strlen($data);
  46. $indent = isset($indent) ? $indent : ' ';
  47. $newline = "\n";
  48. $prevChar = '';
  49. $outOfQuotes = true;
  50. for ($i = 0; $i <= $length; $i++) {
  51. $char = substr($data, $i, 1);
  52. if ($char == '"' && $prevChar != '\\') {
  53. $outOfQuotes = !$outOfQuotes;
  54. } elseif (($char == '}' || $char == ']') && $outOfQuotes) {
  55. $ret .= $newline;
  56. $pos--;
  57. for ($j = 0; $j < $pos; $j++) {
  58. $ret .= $indent;
  59. }
  60. }
  61. $ret .= $char;
  62. if (($char == ',' || $char == '{' || $char == '[') && $outOfQuotes) {
  63. $ret .= $newline;
  64. if ($char == '{' || $char == '[') {
  65. $pos++;
  66. }
  67. for ($j = 0; $j < $pos; $j++) {
  68. $ret .= $indent;
  69. }
  70. }
  71. $prevChar = $char;
  72. }
  73. return $ret;
  74. }
  75. /**
  76. * 将数组元素进行
  77. * @param String $val
  78. */
  79. protected static function jsonFormatProtect(&$val)
  80. {
  81. if ($val !== true && $val !== false && $val !== null) {
  82. $val = urldecode($val);
  83. }
  84. }
  85. }