Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Drupal为数组中的每个项创建PHP_Php_Loops - Fatal编程技术网

使用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变量。