<?php
$code='array(0  => "a", 123 => 123, $_POST["hello"][\'world\'] => array("is", "actually", "An array !"), 1234, \'got problem ?\', 
 "a" => $GlobalScopeVar, $test_further => function test($noway){echo "this works too !!!";}, "yellow" => "blue",
 "b" => array("nested"=>array(1,2,3), "nested"=>array(1,2,3),"nested"=>array(1,2,3)), "c" => function() use (&$VAR) { return isset($VAR) ? "defined" : "undefined" ; }
  "bug", "fixed", "mwahahahaa" => "Yeaaaah"
);'; // Sample data

$code = preg_replace('#(^\s*array\s*\(\s*)|(\s*\)\s*;?\s*$)#s', '', $code); // Just to get ride of array( at the beginning, and ); at the end

preg_match_all('~
\s*    									# white spaces
########################## KEYS START ##########################
(?:										# We\'ll use this to make keys optional
(?P<keys>								# named group: keys
\d+										# match digits
|										# or
"(?(?=\\\\")..|[^"])*"					# match string between "", works even 4 escaped ones "hello \" world"
|										# or
\'(?(?=\\\\\')..|[^\'])*\'				# match string between \'\', same as above :p
|										# or
\$\w+(?:\[(?:[^[\]]|(?R))*\])*			# match variables $_POST, $var, $var["foo"], $var["foo"]["bar"], $foo[$bar["fail"]]
)										# close group: keys
########################## KEYS END ##########################
\s*										# white spaces
=>										# match =>
)?										# make keys optional
\s*										# white spaces
########################## VALUES START ##########################
(?P<values>								# named group: values
\d+										# match digits
|										# or
"(?(?=\\\\")..|[^"])*"					# match string between "", works even 4 escaped ones "hello \" world"
|										# or
\'(?(?=\\\\\')..|[^\'])*\'				# match string between \'\', same as above :p
|										# or
\$\w+(?:\[(?:[^[\]]|(?R))*\])*			# match variables $_POST, $var, $var["foo"], $var["foo"]["bar"], $foo[$bar["fail"]]
|										# or
array\s*\((?:[^()]|(?R))*\)				# match an array()
|										# or
\[(?:[^[\]]|(?R))*\]					# match an array, new PHP array syntax: [1, 3, 5] is the same as array(1,3,5)
|										# or
(?:function\s+)?\w+\s*					# match functions: helloWorld, function name
(?:\((?:[^()]|(?R))*\))					# match function parameters (wut), (), (array(1,2,4))
(?:(?:\s*use\s*\((?:[^()]|(?R))*\)\s*)? # match use(&$var), use($foo, $bar) (optionally)
\{(?:[^{}]|(?R))*\}						# match { whatever}
)?;?									# match ; (optionally)
)										# close group: values
########################## VALUES END ##########################
\s*										# white spaces
~xsi', $code, $m); // Matching :p

print_r($m['keys']); // Print keys
print_r($m['values']); // Print values


// Since some keys may be empty in case you didn't specify them in the array, let's fill them up !
foreach($m['keys'] as $index => &$key){
	if($key === ''){
		$key = 'made_up_index_'.$index;
	}
}
$results = array_combine($m['keys'], $m['values']);
print_r($results); // printing results
?>