- <?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 
-   
- \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['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; 
- 	} 
- } 
- print_r($results); // printing results 
- ?> 
				PD9waHAKJGNvZGU9J2FycmF5KDAgID0+ICJhIiwgMTIzID0+IDEyMywgJF9QT1NUWyJoZWxsbyJdW1wnd29ybGRcJ10gPT4gYXJyYXkoImlzIiwgImFjdHVhbGx5IiwgIkFuIGFycmF5ICEiKSwgMTIzNCwgXCdnb3QgcHJvYmxlbSA/XCcsIAogImEiID0+ICRHbG9iYWxTY29wZVZhciwgJHRlc3RfZnVydGhlciA9PiBmdW5jdGlvbiB0ZXN0KCRub3dheSl7ZWNobyAidGhpcyB3b3JrcyB0b28gISEhIjt9LCAieWVsbG93IiA9PiAiYmx1ZSIsCiAiYiIgPT4gYXJyYXkoIm5lc3RlZCI9PmFycmF5KDEsMiwzKSwgIm5lc3RlZCI9PmFycmF5KDEsMiwzKSwibmVzdGVkIj0+YXJyYXkoMSwyLDMpKSwgImMiID0+IGZ1bmN0aW9uKCkgdXNlICgmJFZBUikgeyByZXR1cm4gaXNzZXQoJFZBUikgPyAiZGVmaW5lZCIgOiAidW5kZWZpbmVkIiA7IH0KICAiYnVnIiwgImZpeGVkIiwgIm13YWhhaGFoYWEiID0+ICJZZWFhYWFoIgopOyc7IC8vIFNhbXBsZSBkYXRhCgokY29kZSA9IHByZWdfcmVwbGFjZSgnIyheXHMqYXJyYXlccypcKFxzKil8KFxzKlwpXHMqOz9ccyokKSNzJywgJycsICRjb2RlKTsgLy8gSnVzdCB0byBnZXQgcmlkZSBvZiBhcnJheSggYXQgdGhlIGJlZ2lubmluZywgYW5kICk7IGF0IHRoZSBlbmQKCnByZWdfbWF0Y2hfYWxsKCd+ClxzKiAgICAJCQkJCQkJCQkjIHdoaXRlIHNwYWNlcwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBLRVlTIFNUQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCig/OgkJCQkJCQkJCQkjIFdlXCdsbCB1c2UgdGhpcyB0byBtYWtlIGtleXMgb3B0aW9uYWwKKD9QPGtleXM+CQkJCQkJCQkjIG5hbWVkIGdyb3VwOiBrZXlzClxkKwkJCQkJCQkJCQkjIG1hdGNoIGRpZ2l0cwp8CQkJCQkJCQkJCSMgb3IKIig/KD89XFxcXCIpLi58W14iXSkqIgkJCQkJIyBtYXRjaCBzdHJpbmcgYmV0d2VlbiAiIiwgd29ya3MgZXZlbiA0IGVzY2FwZWQgb25lcyAiaGVsbG8gXCIgd29ybGQiCnwJCQkJCQkJCQkJIyBvcgpcJyg/KD89XFxcXFwnKS4ufFteXCddKSpcJwkJCQkjIG1hdGNoIHN0cmluZyBiZXR3ZWVuIFwnXCcsIHNhbWUgYXMgYWJvdmUgOnAKfAkJCQkJCQkJCQkjIG9yClwkXHcrKD86XFsoPzpbXltcXV18KD9SKSkqXF0pKgkJCSMgbWF0Y2ggdmFyaWFibGVzICRfUE9TVCwgJHZhciwgJHZhclsiZm9vIl0sICR2YXJbImZvbyJdWyJiYXIiXSwgJGZvb1skYmFyWyJmYWlsIl1dCikJCQkJCQkJCQkJIyBjbG9zZSBncm91cDoga2V5cwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBLRVlTIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpccyoJCQkJCQkJCQkJIyB3aGl0ZSBzcGFjZXMKPT4JCQkJCQkJCQkJIyBtYXRjaCA9PgopPwkJCQkJCQkJCQkjIG1ha2Uga2V5cyBvcHRpb25hbApccyoJCQkJCQkJCQkJIyB3aGl0ZSBzcGFjZXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgVkFMVUVTIFNUQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCig/UDx2YWx1ZXM+CQkJCQkJCQkjIG5hbWVkIGdyb3VwOiB2YWx1ZXMKXGQrCQkJCQkJCQkJCSMgbWF0Y2ggZGlnaXRzCnwJCQkJCQkJCQkJIyBvcgoiKD8oPz1cXFxcIikuLnxbXiJdKSoiCQkJCQkjIG1hdGNoIHN0cmluZyBiZXR3ZWVuICIiLCB3b3JrcyBldmVuIDQgZXNjYXBlZCBvbmVzICJoZWxsbyBcIiB3b3JsZCIKfAkJCQkJCQkJCQkjIG9yClwnKD8oPz1cXFxcXCcpLi58W15cJ10pKlwnCQkJCSMgbWF0Y2ggc3RyaW5nIGJldHdlZW4gXCdcJywgc2FtZSBhcyBhYm92ZSA6cAp8CQkJCQkJCQkJCSMgb3IKXCRcdysoPzpcWyg/OlteW1xdXXwoP1IpKSpcXSkqCQkJIyBtYXRjaCB2YXJpYWJsZXMgJF9QT1NULCAkdmFyLCAkdmFyWyJmb28iXSwgJHZhclsiZm9vIl1bImJhciJdLCAkZm9vWyRiYXJbImZhaWwiXV0KfAkJCQkJCQkJCQkjIG9yCmFycmF5XHMqXCgoPzpbXigpXXwoP1IpKSpcKQkJCQkjIG1hdGNoIGFuIGFycmF5KCkKfAkJCQkJCQkJCQkjIG9yClxbKD86W15bXF1dfCg/UikpKlxdCQkJCQkjIG1hdGNoIGFuIGFycmF5LCBuZXcgUEhQIGFycmF5IHN5bnRheDogWzEsIDMsIDVdIGlzIHRoZSBzYW1lIGFzIGFycmF5KDEsMyw1KQp8CQkJCQkJCQkJCSMgb3IKKD86ZnVuY3Rpb25ccyspP1x3K1xzKgkJCQkJIyBtYXRjaCBmdW5jdGlvbnM6IGhlbGxvV29ybGQsIGZ1bmN0aW9uIG5hbWUKKD86XCgoPzpbXigpXXwoP1IpKSpcKSkJCQkJCSMgbWF0Y2ggZnVuY3Rpb24gcGFyYW1ldGVycyAod3V0KSwgKCksIChhcnJheSgxLDIsNCkpCig/Oig/OlxzKnVzZVxzKlwoKD86W14oKV18KD9SKSkqXClccyopPyAjIG1hdGNoIHVzZSgmJHZhciksIHVzZSgkZm9vLCAkYmFyKSAob3B0aW9uYWxseSkKXHsoPzpbXnt9XXwoP1IpKSpcfQkJCQkJCSMgbWF0Y2ggeyB3aGF0ZXZlcn0KKT87PwkJCQkJCQkJCSMgbWF0Y2ggOyAob3B0aW9uYWxseSkKKQkJCQkJCQkJCQkjIGNsb3NlIGdyb3VwOiB2YWx1ZXMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgVkFMVUVTIEVORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpccyoJCQkJCQkJCQkJIyB3aGl0ZSBzcGFjZXMKfnhzaScsICRjb2RlLCAkbSk7IC8vIE1hdGNoaW5nIDpwCgpwcmludF9yKCRtWydrZXlzJ10pOyAvLyBQcmludCBrZXlzCnByaW50X3IoJG1bJ3ZhbHVlcyddKTsgLy8gUHJpbnQgdmFsdWVzCgoKLy8gU2luY2Ugc29tZSBrZXlzIG1heSBiZSBlbXB0eSBpbiBjYXNlIHlvdSBkaWRuJ3Qgc3BlY2lmeSB0aGVtIGluIHRoZSBhcnJheSwgbGV0J3MgZmlsbCB0aGVtIHVwICEKZm9yZWFjaCgkbVsna2V5cyddIGFzICRpbmRleCA9PiAmJGtleSl7CglpZigka2V5ID09PSAnJyl7CgkJJGtleSA9ICdtYWRlX3VwX2luZGV4XycuJGluZGV4OwoJfQp9CiRyZXN1bHRzID0gYXJyYXlfY29tYmluZSgkbVsna2V5cyddLCAkbVsndmFsdWVzJ10pOwpwcmludF9yKCRyZXN1bHRzKTsgLy8gcHJpbnRpbmcgcmVzdWx0cwo/Pg==