来自jquery序列化的PHP数组,既可以工作,但哪个是正确的?

时间:2011-10-04 21:53:34

标签: php arrays

我使用它来通过json从jquery到php数组获取一个字符串。

    $navMenuLayout = array();
parse_str($layout['navMenu'], $navMenuLayout);
print_r($navMenuLayout);

但是我注意到如果我取出第一行然后我仍然得到相同的输出,第一行是否重要?

parse_str($layout['navMenu'], $navMenuLayout);
print_r($navMenuLayout);

3 个答案:

答案 0 :(得分:1)

当然,您不必为此函数预定义变量,因为PHP会自动设置它们。

请参阅example from PHP.net,了解定义/未定义第二个参数时会发生什么:

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

?>

因此,如果你没有定义第二个参数,字符串中的每个key =&gt;值对都会变成一个实际变量,而如果你定义一个要设置的变量,它们会被放入一个数组中。变量。 PHP将自动为该函数创建所有内容,您无需预先定义任何内容。

答案 1 :(得分:0)

parse_strphp manual中定义为:

void parse_str ( string $str [, array &$arr ] )

数组参数周围的方括号将其标记为可选。 &将其标记为引用参数,这意味着如果从调用代码传入变量,将创建一个数组。

所以要么是正确的,但第一个告诉任何维护者代码更多关于你期望从函数调用发送/返回的内容,而不必在手册中查找。

答案 2 :(得分:0)

$navMenuLayout = array();声明变量。您可以在不首先声明它的情况下离开,但如果您在php.ini错误配置中启用了通知,则会收到通知,通知您正在使用未声明的变量(请参阅http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting以设置错误日志记录级别)。

传递给函数

$navMenuLayout,意图用函数的结果替换它的值。

如果你看一下http://www.php.net/parse_str,你会在声明中看到有一个&amp;在变量名称之前:parse_str ( string $str [, array &$arr ] )。这意味着传递的变量将被覆盖。