Подсчитать сумму из нескольких строк и дописать их в предыдущую строчку массива

Awax

Новичок
Подсчитать сумму из нескольких строк и дописать их в предыдущую строчку массива

Т.к я совсем новичек в PHP, прошу у вас помощи.

есть массив у которого поле $row[levl] отличается либо = 1 либо = 2
Идем по массиву встречаем строку с $row[levl]==2, начинаем подсчитывать их.
Как сохранить уже полученное значение $summs в предыдущую строку с $row[levl]==1 ?

выводим только эти элементы массива
PHP:
echo "$ID.$row[levl]."-".$row[type].$row[col]."*". $row[price]"="."1- $summ 2- $summs";
массив
1 мясо 4 5
1 сыр 4 2
2 молоко 2 3
2 творог 1 3
1 сметана 2 3

привести к виду
1 мясо 4 5 = 20
1 сыр 4 3 = 12 - 9
2 молоко 2 3
2 творог 1 3
1 сметана 2 3 = 6

$row[levl]
$summ мы считаем в каждой строке массива.

Может ставить какую либо метку в $row[levl]==1, а потом к ней возвращаться и дописывать новое значение?
 

dimagolov

Новичок
Может ставить какую либо метку
как я понимаю, сумма $row[levl] == 2 должна отниматься от последней $row[levl] == 1 перед ними? тогда тебе хватит оной переменной с индексом последнего $row[levl] == 1, который устанавливаем каждый раз, когда находим $row[levl] == 2, а когда опять находим $row[levl] == 1 смотрим не пустая ли сумма значений в $row[levl] == 2 и если не пустая, то дорисовываем нужный минус по запомненному индексу.

-~{}~ 03.06.10 11:02:

soines, алгоритм там виден из примера. понимание алгоритма сродни задачкам по математике за 5-й класс "дополнить последовательность"
 

Awax

Новичок
Автор оригинала: dimagolov
как я понимаю, сумма $row[levl] == 2 должна отниматься от последней $row[levl] == 1 перед ними? тогда тебе хватит оной переменной с индексом последнего $row[levl] == 1, который устанавливаем каждый раз, когда находим $row[levl] == 2, а когда опять находим $row[levl] == 1 смотрим не пустая ли сумма значений в $row[levl] == 2 и если не пустая, то дорисовываем нужный минус по запомненному индексу.
Нет не должна отниматься, сумма $row[levl] == 2 должна дописываться в вышестоящую строку, т.е. $row[levl] == 1.
строк с $row[levl] может быть несколько 1 - 4 (грубо говоря - это глубина дерева).

Значение 1- $summ выводится и подсчитывается в каждой строке
2- $summs считается и дописывается в вышестоящую строчку.
Мне просто хочется понять принцип, хотя бы как можно будет пробежаться по циклу и вернуться назад.
Можете привести простенький код, как пробежаться по массиву несколько раз, с сохранением индекса?
 

FRIE

Новичок
короче идешь ты по массиву, высчитываешь то что тебе надо, то что надо записать загонешь в переменные и ставишь им индекс и значение, потом бежишь по тому же массиву точно так же все считаешь и по пути добавляешь то что вычислил в первый раз
 

dimagolov

Новичок
Awax, зря ты не прочитал внимательно мой пост. там все подробно описано то, что тебе нужно. дописываешь ли ты со знаком минус, отнимаешь ли ты, это не существенно, главное нужно запомнить куда (в какую строку) это нужно делать.
 

Awax

Новичок
Автор оригинала: dimagolov
Awax, зря ты не прочитал внимательно мой пост. там все подробно описано то, что тебе нужно. дописываешь ли ты со знаком минус, отнимаешь ли ты, это не существенно, главное нужно запомнить куда (в какую строку) это нужно делать.
Я общий принцип понял.
И я практически разобрался, 1-й и 2-й уровни сейчас вроде считаю нормально.
использую несколько foreach подряд
в 1-м foreach
PHP:
foreach($arrow as $key =>$val) 
{//помечаю строки  которые нужно считать в общую сумму
  if ($spdef=='' or $spdef==0) $arrow[$key]["crline"] =3; else $arrow[$key]["crline"] =1;
}
во 2-м уже в новом массиве по метке считаю последующие строки пока не нарвусь на $row[levl] == 1
PHP:
$arr = $arrow;   
foreach($arr as $key =>$wal) {подсчитываю lvl ==2 и сохраняю данные в новое поле.}
 if ($arr[$key]["crline"]==3)   /*проверяем стоит ли условие подсчета последующих строк.  */      
{ $kk= $key;           
$lev= $wal[lvl];           
$x=1; $sum=0;          
while ($arrow[$kk+$x]["lvl"]> $lev)//проверка перехода на след-ю строку           
{  $sum+=$arrow[$kk+$x]["sumlev"];                        
$arr[$key]["crline"] = 4;  // если посчитали во 2-м уровне то не считаем родителя.           
$x++;}                 
$arr[$key]["assem"]=$sum;        }
а в 3-ем уже вывожу весь обработаный массив.
----------------
Я просто не знал как можно передать значение переменной снова в массив.

Теперь возник еще один вопрос, как изменить код чтобы можно было учитывать до 5 уровней ($row[levl] == 5) ?
 
Сверху