2012-12-16 66 views
0

我是新來的PHP,我有這樣的代碼:作爲變量的PHP數組?

if(!$form['profile_hunter']['field_profile_hunter_location']['und']['0']['value']['#default_value']){ 
    $form['profile_hunter']['field_profile_hunter_location']['und']['0']['value']['#default_value'] = $default_city; 
    } 

它的工作,但我不喜歡它是那麼長,所以我改變:

$form_location = $form['profile_hunter']['field_profile_hunter_location']['und']['0']['value']['#default_value']; 
if(!$form_location){ 
    $form_location = $city; 
} 

然後它不工作,爲什麼?

+1

詳細說明「不工作」... – prodigitalson

回答

1

因爲您的代碼分配給$form_location,但不是數組中的實際值。

該作業使$form_location引用不同的內容。它以前的值恰好被從數組中拷貝出來的事實是無關緊要的。在C/C++中,你可以使用指針來做這樣的事情,但大多數高級語言不支持它,因爲它往往容易出錯。

無論如何,你可以設置一個變量到最內層的數組,因爲數組是通過引用存儲的。這將減少您需要的代碼量,同時避免直接引用數組元素引入的問題。

4

這是因爲當您分配$ form_location時,它正在複製數據。爲了使這兩個變量爲「點」,以相同的數據,你需要使用引用操作符,例如:

$var = &$some_var; 

,並在你的情況:

$form_location = &$form['profile_hunter']['field_profile_hunter_location']['und']['0']['value']['#default_value']; 
if(!$form_location){ 
    $form_location = $default_city; 
} 

http://php.net/manual/en/language.references.php

0
$form_location = $form['profile_hunter']['field_profile_hunter_location']['und'][0]['value']['#default_value']; 
if(empty($form_location)){ 
    $form['profile_hunter']['field_profile_hunter_location']['und'][0]['value']['#default_value'] = $city; 
} 

你應該使用'empty',這是一個Drupal慣例。另外「0」不是一個字符串,而是一個數字,所以你不需要引用它。

0

得到了答案!感謝託尼!

它應該是

$form_location = &$form['profile_hunter']['field_profile_hunter_location']['und']['0']['value']['#default_value']; 

的「&」是指通過引用傳遞,沒有這將是通過值傳遞。