使用Drupal的数组中的项目的PHP

时间:2016-08-01 15:35:10

标签: 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 = $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的总数吗?

1 个答案:

答案 0 :(得分: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]