<?php
|
class jsarray {
|
static function parse($array) {
|
$data = '<?php '.$array.' ?>';
|
$data = token_get_all($data);
|
|
$stack = array( array() );
|
$element = NULL;
|
foreach($data as $token) {
|
if(is_array($token)) {
|
// Ignore < ? php and ? > added above
|
if($token[0] == T_OPEN_TAG OR $token[0] == T_CLOSE_TAG) continue;
|
// String/int element within an array
|
if($token[0] == T_CONSTANT_ENCAPSED_STRING) {
|
$element = substr($token[1], 1, -1);
|
}
|
if($token[0] == T_LNUMBER) {
|
$element = $token[1];
|
}
|
}
|
// Nested array
|
elseif($token == '[') {
|
array_push($stack, array());
|
}
|
// End of nested array
|
elseif($token == ']') {
|
// Put elements into the latest array
|
if($element !== NULL && $element !== FALSE) {
|
end($stack);
|
$stack[key($stack)][] = $element;
|
$element = NULL;
|
}
|
|
// Check - maybe there are no elements between ] and next ]
|
$element = FALSE;
|
|
$temp = array_pop($stack);
|
end($stack);
|
$stack[key($stack)][] = $temp;
|
unset($temp);
|
}
|
// Elements separator
|
elseif($token == ',') {
|
// Put elements into the latest array (]] check)
|
if($element !== FALSE) {
|
end($stack);
|
$stack[key($stack)][] = $element;
|
}
|
$element = NULL;
|
}
|
else
|
{
|
return FALSE;
|
}
|
}
|
|
if(isset($stack[0][0])) {
|
return $stack[0][0];
|
} else {
|
return NULL;
|
}
|
}
|
}
|
?>
|