PHP - 除了foreach中的值之外的总和值

时间:2013-09-14 00:43:16

标签: php arrays foreach sum

这就是我们所拥有的,据我所知这是一个复杂的数组:

<?php
// the elements array var_dump($elements);

$elements = array(4) {
[0]=> object(stdClass) { ["id"]=> string(1) "1" ["velocity"]=> string(3) "500" } //this is element0
[1]=> object(stdClass) { ["id"]=> string(1) "2" ["velocity"]=> string(3) "600" } //this is element1
[2]=> object(stdClass) { ["id"]=> string(1) "3" ["velocity"]=> string(3) "700" } //this is element2
[3]=> object(stdClass) { ["id"]=> string(1) "4" ["velocity"]=> string(3) "800" } //this is element3
}

// the foreach

$sumAll=0; 
foreach ($elements as $key=>$element) {
$trek = $element->velocity; 

$someVarINeed = ( $key == 0 ) ? $external_value : $sumAll + $trek[$key-1]; // this is what I know it would work but it does not


// EXPECTED RESULTS

//because there is no previous 
when $key=0 $someVarINeed = $external_value;

// this should be $someVarINeed = 0 + 500 = 500
when $key=1 $someVarINeed = $sumAll + $element0->velocity;

// this should be $someVarINeed = 0 + 500 + 600 = 1100
when $key=2 $someVarINeed = $sumAll + $element0->velocity + $element1->velocity; 

// this should be $someVarINeed = 0 + 500 + 600 + 700 = 1800
when $key=3 $someVarINeed = $sumAll + $element0->velocity + $element1->velocity + $element2->velocity; 
}
?>

我编辑了希望更有意义的代码。

我不知道这是一个对象/数组是什么,我想总结$ trek的值,用于每个$元素作为一个值,仅由前面元素值的总和而不是自身确定

一如既往,感谢您的回复:)

3 个答案:

答案 0 :(得分:1)

$ trek是一个值,它不是数组,所以你不能使用$ trek [$ key-1]。

将其更改为:$ elements [$ key-1] - &gt; velocity

答案 1 :(得分:0)

我们对你的代码很困惑,因为有一些未知的参数并且没有正确的数组声明。

既然你提到过......

  

我想总结一下$ trek的值,用于每个$元素   值仅由前面元素值和的总和决定   不是它自己。

我希望这就是你要找的东西。

代码:

<?php
$elements=array(10,20,30); //An array with elements , keys not explicitly mentioned
$sumAll=0;
$someVarINeed=0;
$external_value=0;
foreach ($elements as $key=>$value) {
    $trek = $value;
    $someVarINeed += (( $key === 0 ) ? $external_value : $sumAll + $trek);
}
echo $someVarINeed;

?>

<强>输出:

  

50

因为我们检查$key === 0,第一个数组元素的键为0,所以它将被分配$external_value。以下连续元素不符合条件,因为键将1&amp;因此,第一个元素将被忽略,从而总结最后两个元素。

如果将此数组$elements=array(10,20,30);替换为$elements=array('number1'=>10,'number2'=>20,'number3'=>30);,则输出将 60 。如您所见,所有值都分配了密钥。

答案 2 :(得分:-2)

我认为你不小心在这里测试了一下:

if ( $key = 0 ) {

我认为你的意思是:

if ( $key == 0 ) {