Last active
December 22, 2022 05:06
-
-
Save stemar/f4cc560e2bb96b99d1e3af292fb3ee20 to your computer and use it in GitHub Desktop.
PHP var_export() with short array syntax (square brackets) indented 2 spaces.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* PHP var_export() with short array syntax (square brackets) indented 2 spaces. | |
* | |
* NOTE: The only issue is when a string value has `=>\n[`, it will get converted to `=> [` | |
* @link https://www.php.net/manual/en/function.var-export.php | |
* @param mixed $expression | |
* @param bool $return | |
* @return string | |
*/ | |
function varexport($expression, $return=FALSE) { | |
$export = var_export($expression, TRUE); | |
$patterns = [ | |
"/array \(/" => '[', | |
"/^([ ]*)\)(,?)$/m" => '$1]$2', | |
"/=>[ ]?\n[ ]+\[/" => '=> [', | |
"/([ ]*)(\'[^\']+\') => ([\[\'])/" => '$1$2 => $3', | |
]; | |
$export = preg_replace(array_keys($patterns), array_values($patterns), $export); | |
if ((bool)$return) return $export; else echo $export; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$array = [ | |
'str' => 'Test | |
spaces', | |
0 => 33, | |
1 => TRUE, | |
[3,4,'d',[]], | |
'arr' => [ | |
'text with spaces' => '[Tes\'t"s": | |
=> [ | |
=> | |
[ | |
{ | |
spaces', | |
], | |
"str2" => "Test's' | |
} spaces", | |
'arr2' => [ | |
'text with spaces' => [ | |
'arr3' => [ | |
'text with spaces' => 'Te": "st \' => [ | |
spaces', | |
], | |
], | |
], | |
]; | |
varexport($array); | |
// Result: | |
``` | |
[ | |
'str' => 'Test | |
spaces', | |
0 => 33, | |
1 => true, | |
2 => [ | |
0 => 3, | |
1 => 4, | |
2 => 'd', | |
3 => [ | |
], | |
], | |
'arr' => [ | |
'text with spaces' => '[Tes\'t"s": | |
=> [ | |
=> [ | |
{ | |
spaces', | |
], | |
'str2' => 'Test\'s\' | |
} spaces', | |
'arr2' => [ | |
'text with spaces' => [ | |
'arr3' => [ | |
'text with spaces' => 'Te": "st \' => [ | |
spaces', | |
], | |
], | |
], | |
] | |
``` | |
NOTE: The only issue is when a string value has `=>\n[`, it will get converted to `=> [`. See lines 11-12 vs line 47. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Excellent, thank you. Adding this line will also strip numeric array keys: