Guest User

Untitled

a guest
Jan 22nd, 2018
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.63 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4. * Class JsonToArraySyntax
  5. *
  6. * @author Yurii Slobodeniuk <silencedis@gmail.com>
  7. */
  8. class JsonToArraySyntax
  9. {
  10. /**
  11. * @param string $json A JSON string
  12. *
  13. * @return string
  14. *
  15. * @throws \Exception An exception with last json error message if failed to decode the json string
  16. */
  17. public function convert(string $json): string
  18. {
  19. $array = json_decode($json, true);
  20. if ($array === null && json_last_error()) {
  21. throw new \Exception(json_last_error_msg());
  22. }
  23.  
  24. return $this->getArraySyntax($array);
  25. }
  26.  
  27. /**
  28. * @param array $array An array to print
  29. * @param int $level An internal parameter
  30. *
  31. * @return string
  32. */
  33. private function getArraySyntax(array $array, int $level = 0): string
  34. {
  35. $strParts = [];
  36.  
  37. $level++;
  38.  
  39. $strParts[] = '[' . PHP_EOL;
  40.  
  41. foreach ($array as $key => $value) {
  42. $strParts[] = str_repeat(' ', 4 * $level);
  43.  
  44. if (!is_int($key)) {
  45. $strParts[] = "'$key' => ";
  46. }
  47.  
  48. if (is_iterable($value)) {
  49. $strParts[] = $this->getArraySyntax($value, $level);
  50. $strParts[] = PHP_EOL;
  51. } elseif (is_numeric($value)) {
  52. $strParts[] = "$value," . PHP_EOL;
  53. } else {
  54. $strParts[] = sprintf("'%s',", addslashes($value)) . PHP_EOL;
  55. }
  56. }
  57.  
  58. $strParts[] = str_repeat(' ', 4 * ($level - 1)) . ']' . (($level - 1) == 0 ? '' : ',');
  59.  
  60. return implode('', $strParts);
  61. }
  62. }
Add Comment
Please, Sign In to add comment