2012-12-16 43 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']; 

的“&”是指通过引用传递,没有这将是通过值传递。