2011-10-04 69 views
0

我正在使用此从jquery获取一个字符串通过json的php数组。来自jquery serialize的PHP数组,这两个工作,但这是正确的?

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

但我发现,如果我拿出第一行,我仍然得到同样的输出,所做的第一线回事?

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

回答

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 

?> 

所以,如果你不定义第二个参数,字符串中的每个关键=>值对被制作成一个实际的变量,而如果你定义了一个要设置的变量,它们将作为该变量放入一个数组中。 PHP将自动为该函数创建所有内容,您不必预先定义任何内容。

+0

好的谢谢,我明白了。 – pv1

0

parse_strphp manual所定义:

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

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

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

0

$navMenuLayout = array();声明变量。你可以逃脱不首先声明,但如果你在你的php.ini中的错误配置中启用了通知,你会得到一个通知,通知您未声明的变量来使用(见http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting设置你的错误日志记录级别)。

$navMenuLayout传递给函数,目的是用函数的结果替换它的值。

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

+0

由于函数自动定义变量,它不会产生通知错误。事实上,手册页上的任何地方都没有提到通知错误,所以我不知道你从哪里得到这些错误。 – animuson

+0

你说得很对。看起来像PHP实际上会自动处理。我很习惯看到'PHP Notice:Undefined variable:'处理代码库时,我自动假设这也会抛出一个。 – Tom