2016-08-01 10 views
0

実体参照フィールドの価格項目に基づいて値を計算しようとしています。Drupalで配列されたアイテムのそれぞれのPHP

私は現在

if (isset($entity->field_choose_a_package['und'][0]['target_id'])) { 
    $package1nid = $entity->field_choose_a_package['und'][0]['target_id']; 
    $package1 = node_load($package1nid); 
    $package1price = $package1->field_price['und'][0]['value']; 
} else { 
    $package1price = 0; 
} 

if (isset($entity->field_choose_a_package['und'][1]['target_id'])) { 
    $package2nid = $entity->field_choose_a_package['und'][1]['target_id']; 
    $package2 = node_load($package2nid); 
    $package2price = $package2->field_price['und'][0]['value']; 
} else { 
    $package2price = 0; 
} 

if (isset($entity->field_choose_a_package['und'][2]['target_id'])) { 
    $package3nid = $entity->field_choose_a_package['und'][2]['target_id']; 
    $package3 = node_load($package3nid); 
    $package3price = $package3->field_price['und'][0]['value']; 
} else { 
    $package3price = 0; 
} 

$packagestotal = $package1price + $package2price + $package3price; 

$entity_field[0]['value'] = $packagestotal; 

ただし、追加パッケージの無制限の量があるかもしれない...働く、これを持って、そして20+パッケージは試してみて、私の拠点をカバーするために、むしろ私よりもコードを複製します、私は各ループのために行うことができる方法がなければならない。

私はこのような何か、

$arr = $entity->field_choose_a_package['und']; 

foreach ($arr as &$value) { 
    if (isset($entity->field_choose_a_package['und'][$value]['target_id'])) { 
     $package1nid = $entity->field_choose_a_package['und'][$value]['target_id']; 
     $package1 = node_load($package1nid); 
     $package1price = $package1->field_price['und'][$value]['value']; 
    } else { 
     $package1price = 0; 
    } 
} 

unset($value); 

を試してみましたが、私は、変数をインクリメントする方法を見つけ出す、あるいはする必要がある場合はカント? foreachから合計を計算することはできますか?

答えて

2
$packagestotal = 0; 
$numPackages = 3; 

for($i = 0; $i <= $numPackages; $i++) { 
    if(isset($entity->field_choose_a_package['und'][$i]['target_id'])) { 
     ${'package' . $i . 'nid'} = $entity->field_choose_a_package['und'][$i]['target_id']; 
     ${'package' . $i} = node_load(${'package' . $i . 'nid'}); 
     $packagestotal += ${'package' . $i}->field_price['und'][0]['value']; 
    } 
} 

$entity_field[0]['value'] = $packagestotal; 

これでうまくいくはずです。

が、私はあなたに感謝し、あなたは、アレイ内のパッケージ変数をラップとしてではなく、コードがはるかに読みやすいだろうとあなたは完璧な厥$package[$i]

+0

を使用して、各パッケージの属性にアクセスすることができvariable variablesを使用することをお勧めします! – Collins

+0

numPackagesは行の量を制限しますか?たとえば、100人以上のパッケージを注文する(または買う余裕がない)人がいると安全に仮定するために、100に設定できますか? – Collins

+0

よく$ numPackagesは、forループが何回反復するべきかを示しています。 $ packages100が存在しない場合、エラーがスローされます。このコードでは、$パッケージ変数の数を事前に知っていることを前提としています。 – iyop45

関連する問題