PHP数组作为变量?

时间:2012-12-16 04:33:19

标签: php arrays

我是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 个答案:

答案 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;
}

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

答案 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'];

“&”意味着通过引用传递,没有它将通过值传递。