[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как правильно сложить значения массива
Renden
Виделись сегодня, есть такой код:

while($row = mysql_fetch_assoc($query))
$summ_array[$row['status_name']][] = $row['days'];
//получаем
[отпуск] => Array
(
[
0] => 14
[1] => 3
)
//пробывал так:
$summ_array[$row['status_name']] += $row['days'];
Куча нойтсов:
Undefined variable: summ_array
Undefined index: отпуск

Как надо чтоб все было чик-поп?))




Спустя 13 минут, 33 секунды (21.06.2011 - 16:18) T1grOK написал(а):
А в запросе посчитать не проще?!

Спустя 4 минуты, 37 секунд (21.06.2011 - 16:23) linker написал(а):
$summ_array = array();
while($row = mysql_fetch_assoc($query))
$summ_array[$row['status_name']] += $row['days'];

Спустя 1 минута, 45 секунд (21.06.2011 - 16:25) alex12060 написал(а):

$summ_array = array();

while($row = mysql_fetch_assoc($query))
$summ_array[$row['status_name']][] = $row['days'];

Спустя 30 секунд (21.06.2011 - 16:25) Renden написал(а):
T1grOK
Нееет :)

(SELECT SUM(DATEDIFF(date_end,date_begin)) FROM holiday WHERE user_id='$usr_id' and allow='1' and YEAR(date_begin)='$years' and hol_status='2') as hol_comand,
(
SELECT SUM(DATEDIFF(date_end,date_begin)) FROM holiday WHERE user_id='$usr_id' and allow='1' and YEAR(date_begin)='$years' and hol_status='1') as hol_holly,
(
SELECT SUM(DATEDIFF(date_end,date_begin)) FROM holiday WHERE user_id='$usr_id' and allow='1' and YEAR(date_begin)='$years' and hol_status='3') as hol_holly_n,
(
SELECT SUM(DATEDIFF(date_end,date_begin)) FROM holiday WHERE user_id='$usr_id' and allow='1' and YEAR(date_begin)='$years' and hol_status='4') as hol_bol,
(
SELECT SUM(DATEDIFF(date_end,date_begin)) FROM holiday WHERE user_id='$usr_id' and allow='1' and YEAR(date_begin)='$years' and hol_status='5') as hol_bol_n"

Нунафиг яманал :)


linker
Notice: Undefined index: отпуск in /usr/local/apache2/htdocs/dev/modules/holiday/index.php on line 101
Notice: Undefined index: командировка in /usr/local/apache2/htdocs/dev/modules/holiday/index.php on line 101

Ошибка с массивом пропала:)

Спустя 7 минут, 10 секунд (21.06.2011 - 16:32) Renden написал(а):
Я непойму почему он делает замечание, вроде же все Ок sad.gif

Спустя 43 секунды (21.06.2011 - 16:33) linker написал(а):
$summ_array = array();
while($row = mysql_fetch_assoc($query))
{
$name = $row['status_name'];
$summ_array[$name] = isset($summ_array[$name]) ? $summ_array[$name] + $row['days'] : $row['days'];
}

Спустя 1 минута, 52 секунды (21.06.2011 - 16:35) linker написал(а):
Или так
$summ_array = array();
while($row = mysql_fetch_assoc($query))
{
if (isset($summ_array[$row['status_name']]))
$summ_array[$row['status_name']] += $row['days'];
else
$summ_array[$row['status_name']] = $row['days'];
}

Спустя 54 секунды (21.06.2011 - 16:36) T1grOK написал(а):

$status = array('статус1'=NULL, 'статус2'=>NULL)

while($row = mysql_fetch_assoc($query))
$summ_array[$row['status_name']][] = $row['days'];

foreach($status as $key=>$value){
$status[$key] = array_sum($summ_array[$key]);
}

Спустя 4 минуты, 23 секунды (21.06.2011 - 16:40) Renden написал(а):
linker
Спасибо, но я непонял почему была ошибка? Разьве он не должен был прибавлять и присваивать одновременно, странно..

T1grOK
Лишний перебор массива - неэлегантно, но спс за поддержку smile.gif

Спустя 1 день, 23 часа, 14 минут, 50 секунд (23.06.2011 - 15:55) Renden написал(а):
Дабы не создавать новую тему попрос тотже но немного другой:
Цитата


генирируется так:
foreach($arr as $val)
  $array[$name[0]][] = array($val[1],$val[2],$val[3],$val[4]);

    [value1 ] => Array
        (
            [0] => Array
                (
                    [0] =>            16.
                    [1] =>            0.
                    [2] =>            4.
                    [3] =>            -4.
                )

            [1] => Array
                (
                    [0] =>            16.
                    [1] =>            0.
                    [2] =>            6.
                    [3] =>            -4.
                )

        )

Как можно его сложить чтоб получилось так?
Цитата

[value1 ] => Array
        (
                    [0] =>            32.
                    [1] =>            0.
                    [2] =>            10.
                    [3] =>            -8.
        )

т.е не все значения а ключ к ключу, значение к зачению.

Спустя 37 минут, 59 секунд (23.06.2011 - 16:33) gidrosoldat написал(а):
Может так?

$mega_array = array();
foreach($arr as $val)
{
$mega_array = array_merge(array($val[1],$val[2],$val[3],$val[4]), $mega_array);
}

Спустя 5 минут, 38 секунд (23.06.2011 - 16:39) nugle написал(а):
Может так?
foreach($arr['value1'][0] as $key)
$arr['value1'][$key] = $arr['value1'][0][$key] + $arr['value1'][1][$key];

Спустя 52 минуты, 58 секунд (23.06.2011 - 17:32) gidrosoldat написал(а):
nugle, твой вариант сработает максимум с 4 массивами. Зачем вообще привязывать количество переменных в конечном массиве к числу общих массивов (общая переменная $key)? Или я не так понял?

Спустя 1 час, 6 минут, 30 секунд (23.06.2011 - 18:38) nugle написал(а):
gidrosoldat
я просто глянул на структуру и поэтому так написал

Спустя 5 минут, 18 секунд (23.06.2011 - 18:44) Renden написал(а):
gidrosoldat
Невижу смысла сливать пустой массив и массив со значениями, в итоге получится просто массив со значениями.

nugle
Идею понял, но запустить что-то немогу - неработает sad.gif

Спустя 28 минут, 19 секунд (23.06.2011 - 19:12) nugle написал(а):
вот смотри как можно, при условии, что ключи в массивах одинаковые
<?php

$arr = array(
'value1' => array(
0 => array(

0 => 16,
1 => 0,
2 => 4,
3 => -4

),
1 => array(

0 => 16,
1 => 0,
2 => 6,
3 => -4

)

));


$keys = array_keys($arr['value1'][0]);


foreach($keys as $key)
{
$next['value1'][$key] = $arr['value1'][0][$key] + $arr['value1'][1][$key];
}
var_dump($next);

?>

Спустя 2 часа, 46 минут, 28 секунд (23.06.2011 - 21:58) Renden написал(а):
nugle
Ну так то как ты написал оно работает, но у меня ключи естественно разные, массив огромный там 'value1' 'что-то' 'еще_value3' и тп, и у каждого вложенность из массивов(разная) (что общее то что вложено 4 пары ключ => значение)
У тебя тут ключ жестко прописан, как мне взять любое значение ключа?
Т.е пример массива:
Цитата

    [Рубашка мужская длинный рукав] => Array
        (
            [0] => Array
                (
                    [0] =>            14.
                    [1] =>            0.
                    [2] =>            1.
                    [3] =>            -1.
                )

            [1] => Array
                (
                    [0] =>            14.
                    [1] =>            0.
                    [2] =>            1.
                    [3] =>            -1.
                )

        )

    [Рубашка мужская короткий рукав] => Array
        (
            [0] => Array
                (
                    [0] =>            10.
                    [1] =>            0.
                    [2] =>            1.
                    [3] =>            -1.
                )

            [1] => Array
                (
                    [0] =>            30.
                    [1] =>            0.
                    [2] =>            2.
                    [3] =>            -4.
                )

            [2] => Array
                (
                    [0] =>            14.
                    [1] =>            0.
                    [2] =>            0.
                    [3] =>            -1.
                )

            [3] => Array
                (
                    [0] =>            27.
                    [1] =>            0.
                    [2] =>            1.
                    [3] =>            -3.
                )

            [4] => Array
                (
                    [0] =>            14.
                    [1] =>            0.
                    [2] =>            1.
                    [3] =>            -2.
                )

        )

    [лента -oбруч для волос] => Array
        (
            [0] => Array
                (
                    [0] =>            9.
                    [1] =>            0.
                    [2] =>            0.
                    [3] =>            -2.
                )

        )


Спустя 11 минут, 59 секунд (23.06.2011 - 22:10) gidrosoldat написал(а):
Цитата (Renden @ 23.06.2011 - 15:44)
gidrosoldat
Невижу смысла сливать пустой массив и массив со значениями, в итоге получится просто массив со значениями.

Это на первом витке цикла пустой, а потом уже в переменной $mega_array остаточное значение после первого витка цикла. По идее он должен слить все значения для каждого определенного ключа во всех массивах.

Спустя 9 часов, 59 минут, 47 секунд (24.06.2011 - 08:10) nugle написал(а):
Додумать не сложно, только не пойму почему куча notice, пришлось убрать фиксирование ошибок
<?php
error_reporting(null);
$arr = array(
'value1' => array(
0 => array(

0 => 16,
1 => 0,
2 => 4,
3 => -4

),
1 => array(

0 => 16,
1 => 0,
2 => 6,
3 => -4

)),
'value2' => array(
0 => array(

0 => 16,
1 => 0,
2 => 4,
3 => -4

),
1 => array(

0 => 12,
1 => 0,
2 => 6,
3 => -4

))

);

$new = array();

$key_arr = array_keys($arr);
if(count($key_arr) > 0)
$keys = array_keys($arr[$key_arr[0]][0]);

for($i=0; $i<count($arr); $i++)
{
foreach($arr[$key_arr[$i]] as $key=>$val)
for($i2=0; $i2<count($keys); $i2++)
$new[$key_arr[$i]][$i2] = $val[$i2] + $new[$key_arr[$i]][$i2];
}

var_dump($new);


?>

Спустя 3 часа, 5 минут, 20 секунд (24.06.2011 - 11:15) Renden написал(а):
nugle
Я тоже не совсем понимаю откуда они берутся, но линкер в начале этой темы дал решение как их побороть :)

$new[$key_arr[$i]][$i2] = isset($new[$key_arr[$i]][$i2]) ? $val[$i2] + $new[$key_arr[$i]][$i2] : $val[$i2];

Спустя 1 час, 20 минут, 8 секунд (24.06.2011 - 12:36) nugle написал(а):
первый раз с этим столкнулся)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.