2013-09-14 2 views
-1

Это то, что мы имеем, как я понимаю, это сложный массив:PHP - значения сумм, кроме одного, в Еогеаспе

<?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, которые будут использоваться для каждого элемента $, как значение, определяемое суммой значений предыдущих элементов, а не сам.

Как всегда, спасибо за любой ответ :)

+0

Это недопустимый массив; ваш foreach не ссылается на массив в предоставленном вами скрипте (возможно, вы имели в виду foreach $ var?); Не используйте переменное имя значения массива из текущего цикла так же, как имя массива; Используйте '=', чтобы установить переменную в значение, а не проверять ее. – James

+0

Я действительно не кодер, я действительно не знаю, я знаю, что это работает как-то, он суммирует все значения, включая последний, тот, который я хочу пропустить. – thednp

+0

Ваш код синтаксически неверен. Объявление массива не совсем корректно. Я предлагаю вам начать читать руководство: http://php.net/manual/en/language.types.array.php –

ответ

1

$ trek - это значение, это не массив, поэтому вы не можете использовать $ trek [$ key-1].

Изменить его: $ elements [$ key-1] -> speed

+0

Спасибо, Дон, удивительный, как всегда :) – thednp

-2

Я думаю, что вы случайно Лп = в тесте здесь:

if ($key = 0) { 

Я думаю, что вы имели в виду:

if ($key == 0) { 
+0

Или, может быть, '===' ...? Однако в этом коде есть намного больше ошибок, чем это. – James

+0

еще раз проверьте код. – thednp

0

Мы вполне путают с вашим кодом, так как есть некоторые неизвестные параметры и нет правильного объявления массива.

Поскольку вы упомянули ...

Я хочу суммировать значения $ трека, которые будут использоваться для каждого элемента $ в качестве значения определяется только суммой предыдущих значений элементов и не сам.

Надеюсь, это то, что вы ищете.

Код:

<?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; 

?> 

ВЫВОД:

Поскольку мы проверяем $key === 0, то первый элемент массива имеет клавишу 0, поэтому он будет назначен $external_value. Следующие последовательные элементы не удовлетворяют условию, так как ключи будут 1 & 2. Таким образом, первый элемент будет проигнорирован и, таким образом, суммируется последние два элемента.

Если вы замените этот массив $elements=array(10,20,30); на $elements=array('number1'=>10,'number2'=>20,'number3'=>30);, тогда выход будет . Как видите, все значения имеют назначенные ключи.

+0

С вашим примером кода выход должен быть равен 30, как сумма 10 и 20. – thednp

+0

Я снова обновлю код с полным кодом и var_dumps. – thednp

Смежные вопросы