通过parse_str为数组分配多个值

时间:2013-09-11 02:36:21

标签: php arrays string parsing

我知道您可以通过parse_str()向数组添加值,如下所示:

parse_str( 'a[]=1&a[]=2&a[]=3' );
parse_str( 'a[0]=1&a[1]=2&a[2]=3' );

这两者都产生:

Array (
  [0] => 1
  [1] => 2
  [2] => 3
)

我希望生成一个像这样的数组:

parse_str( 'a[]=1,2,3' );

有没有办法做到这一点,所以我不需要每次都输入a[i]=

1 个答案:

答案 0 :(得分:2)

请勿使用parse_str() ,除非您非常确定您正在做什么。 (下面解释。)相反,我会建议像JSON这样的东西,它不会改变意外的变量,相当快,标准化,更容易生成/消费。

$str = '{"items":[1,2,3]}'
$obj = json_decode($data);

var_export($obj->items);

收率:

 array (
  0 => 1,
  1 => 2,
  2 => 3,
) 

“为什么不用parse_str?”

  1. 错误的输入很容易通过覆盖您不希望的变量来破坏您的代码
  2. 恶意输入可能会带来安全风险。
  3. 例如,试试这个:

    $input = '_SERVER[DOCUMENT_ROOT]=/foo';
    parse_str($input);
    echo($_SERVER['DOCUMENT_ROOT']);
    
    哇,有人设法改变了存储服务器配置数据的变量之一。这可能很容易破坏内容管理代码,然后将文件保存到错误的位置,或绕过“必须是”检查的子文件夹。