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 に答える