-
-
Save rubo77/6821632 to your computer and use it in GitHub Desktop.
This is a replacement for the original idea how to cirumvent the max_input_vars limitation, that uses the original parse_str() on each element of the query to parse
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 | |
/** | |
* do the same than parse_str without max_input_vars limitation: | |
* Parses $string as if it were the query string passed via a URL and sets variables in the current scope. | |
* @param $string array string to parse (not altered like in the original parse_str(), use the second parameter!) | |
* @param $result array If the second parameter is present, variables are stored in this variable as array elements | |
* @return bool true or false if $string is an empty string | |
* | |
* @author rubo77 at https://gist.github.com/rubo77/6821632 | |
**/ | |
function my_parse_str($string, &$result) { | |
if($string==='') return false; | |
$result = array(); | |
// find the pairs "name=value" | |
$pairs = explode('&', $string); | |
foreach ($pairs as $pair) { | |
// use the original parse_str() on each element | |
parse_str($pair, $params); | |
$k=key($params); | |
if(!isset($result[$k])) $result+=$params; | |
else $result[$k] = array_merge_recursive_distinct($result[$k], $params[$k]); | |
} | |
return true; | |
} | |
// better recursive array merge function listed on the array_merge_recursive PHP page in the comments | |
function array_merge_recursive_distinct ( array &$array1, array &$array2 ){ | |
$merged = $array1; | |
foreach ( $array2 as $key => &$value ) { | |
if ( is_array ( $value ) && isset ( $merged [$key] ) && is_array ( $merged [$key] ) ){ | |
$merged [$key] = array_merge_recursive_distinct ( $merged [$key], $value ); | |
} else { | |
$merged [$key] = $value; | |
} | |
} | |
return $merged; | |
} | |
my_parse_str($query, $array); | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
OK, the following seems to mirror
parse_str
perfectly, including dynamic keys which are not last. Specifically, themy_parse_str
function becomes:This works with the following test case:
Note carefully the overwritten second
key[][index]=2
which is consistent withparse_str
's behaviour.