使用Drupal为数组中的每个项创建PHP
我试图根据实体引用字段中的价格字段计算值 我现在有这个,很有效使用Drupal为数组中的每个项创建PHP,php,loops,Php,Loops,我试图根据实体引用字段中的价格字段计算值 我现在有这个,很有效 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 = $packa
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计算总数吗?$packagestotal=0;
$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;
$numPackages=3;
对于($i=0;$i字段_选择_a_包['und'][$i]['target\u 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_字段[0]['value']=$packagestotal;
这应该行得通
尽管如此,我还是建议您将包变量包装在一个数组中,而不是使用,因为这样代码的可读性会更好,并且您可以使用$package[$I]
$packagestotal=0;
$numPackages=3;
对于($i=0;$i字段_选择_a_包['und'][$i]['target\u 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_字段[0]['value']=$packagestotal;
这应该行得通
尽管如此,我还是建议您将包变量包装在一个数组中,而不是使用,因为这样代码的可读性会更好,并且您可以使用
$package[$I]
访问每个包属性,所以numPackages限制行的数量?例如,我可以将其设置为100,以安全地假设没有人可以订购(或支付)100多个包?好吧,$numPackages只是说明For循环应该迭代多少次。如果$packages100不存在,将抛出一个错误。这段代码假设您提前知道有多少$package变量,那么numPackages限制了行的数量?例如,我可以将其设置为100,以安全地假设没有人可以订购(或支付)100多个包?好吧,$numPackages只是说明For循环应该迭代多少次。如果$packages100不存在,将抛出一个错误。此代码假定您提前知道有多少$package变量。