如何从tagIds = 3& tagIds = 8获取数组

时间:2015-07-05 10:36:35

标签: php kohana-3

在PHP中,如果URL如下所示:

?tagIds[]=3&tagIds[]=8

PHP引擎自动将其转换为tagIds数组。但是,如果URL缺少方括号:

?tagIds=3&tagIds=8

自动转换为数组并不会发生。如何在本机PHP和Kohana框架中手动实现相同的操作?

更新 我似乎找到了答案。你能否看一下它潜在的陷阱?请参阅下面的答案。

2 个答案:

答案 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);