在PHP中,如果URL如下所示:
?tagIds[]=3&tagIds[]=8
PHP引擎自动将其转换为tagIds
数组。但是,如果URL缺少方括号:
?tagIds=3&tagIds=8
自动转换为数组并不会发生。如何在本机PHP和Kohana框架中手动实现相同的操作?
更新 我似乎找到了答案。你能否看一下它潜在的陷阱?请参阅下面的答案。
答案 0 :(得分:1)
我似乎找到了解决方案here:
function proper_parse_str($str) {
# result array
$arr = array();
# split on outer delimiter
$pairs = explode('&', $str);
# loop through each pair
foreach ($pairs as $i) {
# split into name and value
list($name,$value) = explode('=', $i, 2);
# if name already exists
if( isset($arr[$name]) ) {
# stick multiple values into an array
if( is_array($arr[$name]) ) {
$arr[$name][] = $value;
}
else {
$arr[$name] = array($arr[$name], $value);
}
}
# otherwise, simply stick it in a scalar
else {
$arr[$name] = $value;
}
}
# return result array
return $arr;
}
$query = proper_parse_str($_SERVER['QUERY_STRING']);
答案 1 :(得分:1)
试试这个:
$str = "tagIds[]=3&tagIds[][]=8&tagIds=33";
function ext_parse_str( $str ) {
$vs = explode("&", $str);
$output = array();
foreach ($vs as $v) {
parse_str($v, $o);
if (is_array($o) && count($o)==1) {
$key = key($o);
$value = $o[$key];
var_dump($value);
if ($value) {
if (!is_array($value)) {
$output[$key][] = $value;
} else {
if (!isset($output[$key])) {
$output[$key] = $value;
} else {
$output[$key] = array_merge_recursive( $output[$key], $value );
}
}
}
}
}
return $output;
}
$query = ext_parse_str($str);
var_dump($query);