我是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;
}
然后它不起作用,为什么?
答案 0 :(得分: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;
}
答案 1 :(得分:1)
因为您的代码分配给$form_location
,而不是分配给数组中的实际值。
作业使$form_location
引用不同的东西。它以前的值恰好被从数组中复制出来的事实是无关紧要的。
在C / C ++中,你可以使用指针做这样的事情,但大多数高级语言不支持它,因为它往往容易出错。
无论如何,您可以将变量设置为最里面的数组,因为数组是通过引用存储的。这将减少您需要的代码量,同时避免直接引用数组元素引入的问题。
答案 2 :(得分: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”也不是一个字符串,而是一个数字,所以你不需要它周围的引号。
答案 3 :(得分:0)
得到了答案!感谢Tony!
应该是
$form_location = &$form['profile_hunter']['field_profile_hunter_location']['und']['0']['value']['#default_value'];
“&”意味着通过引用传递,没有它将通过值传递。