2011-10-04 22 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