0

我是 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;
}

然后就不行了,为什么?

4

4 回答 4

3

这是因为当您分配 $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

于 2012-12-16T04:36:24.060 回答
1

因为您的代码分配给$form_location,而不是数组中的实际值。

分配使$form_location指的是不同的东西。它以前的值恰好是从数组中复制出来的这一事实是无关紧要的。

在 C/C++ 中,您可以使用指针执行类似的操作,但大多数高级语言不支持它,因为它容易出错。

无论如何,您可以为最里面的数组设置一个变量,因为数组是通过引用存储的。这将减少您需要的代码量,同时避免直接引用数组元素引入的问题。

于 2012-12-16T04:35:24.603 回答
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;
}

您可能应该使用“空”,这是 Drupal 约定。“0”也不是一个字符串,而是一个数字,所以你不需要在它周围加上引号。

于 2012-12-16T04:38:44.117 回答
0

得到了答案!感谢托尼!

它应该是

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

“&”表示通过引用传递,没有它就是按值传递。

于 2012-12-16T04:52:16.597 回答