2016-08-01 7 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; 

그래야합니다.

내가 그런 다음 코드는 훨씬 더 읽을 것 오히려 variable variables를 사용하는 것보다 배열의 패키지 변수를 포장하는 것이 좋습니다 것입니다 당신이 $package[$i]

+0

그게 완벽하게 사용하여 각 패키지의 속성에 액세스 할 수 있습니다,하지만, 감사합니다! – Collins

+0

그래서 numPackages가 행의 수를 제한합니까? 예를 들어 아무도 100 개 이상의 패키지를 주문할 수 있다고 가정하지 않고 100으로 설정할 수 있습니다. – Collins

+0

Well $ numPackages는 for 루프가 반복해야하는 횟수를 나타냅니다. $ packages100이 없으면 오류가 발생합니다. 이 코드는 얼마나 많은 $ package 변수가 있는지를 미리 알고 있다고 가정합니다. – iyop45

관련 문제