bO_oblik
@bO_oblik

Простейшее сложение?

Всем привет. Уже миллионный раз натыкаюсь на эту проблему и не могу ничего придумать.


Хочется складывать так:

<font color="black"><a href="http://s-c.me/23046/s">Copy Source</a> | <a href="http://s-c.me/23046/h">Copy HTML</a><ol>
<li><font color="#696969">//Высчитываем суммы</font></li>
<li><font color="#cc6633">$types_sum</font> = <font color="#0000ff">array</font>();</li>
<li> </li>
<li><font color="#0000ff">foreach</font>(<font color="#cc6633">$types</font>[$type] <font color="#0000ff">as</font> <font color="#cc6633">$project</font>)</li>
<li>{</li>
<li>    <font color="#0000ff">foreach</font>(<font color="#cc6633">$project</font> <font color="#0000ff">as</font> <font color="#cc6633">$source</font> =&gt; <font color="#cc6633">$stages</font>)</li>
<li>    {</li>
<li>        <font color="#0000ff">foreach</font>(<font color="#cc6633">$stages</font> <font color="#0000ff">as</font> <font color="#cc6633">$stage</font> =&gt; <font color="#cc6633">$time</font>)</li>
<li>        {</li>
<li>            <font color="#cc6633">$types_sum</font>[<font color="#cc6633">$source</font>][<font color="#cc6633">$stage</font>] += <font color="#cc6633">$time</font>;</li>
<li>        }</li>
<li>    }</li>
<li>} </li>
</ol></font>



А получается всегда так:

<font color="black"><a href="http://s-c.me/23047/s">Copy Source</a> | <a href="http://s-c.me/23047/h">Copy HTML</a><ol>
<li><font color="#696969">//Высчитываем суммы</font></li>
<li><font color="#cc6633">$types_sum</font> = <font color="#0000ff">array</font>();</li>
<li> </li>
<li><font color="#0000ff">foreach</font>(<font color="#cc6633">$types</font>[$type] <font color="#0000ff">as</font> <font color="#cc6633">$project</font>)</li>
<li>{</li>
<li>    <font color="#0000ff">foreach</font>(<font color="#cc6633">$project</font> <font color="#0000ff">as</font> <font color="#cc6633">$source</font> =&gt; <font color="#cc6633">$stages</font>)</li>
<li>    {</li>
<li>        <font color="#0000ff">foreach</font>(<font color="#cc6633">$stages</font> <font color="#0000ff">as</font> <font color="#cc6633">$stage</font> =&gt; <font color="#cc6633">$time</font>)</li>
<li>        {</li>
<li>            <font color="#0000ff">if</font>(<font color="#0000ff">isset</font>(<font color="#cc6633">$types_sum</font>[<font color="#cc6633">$source</font>][<font color="#cc6633">$stage</font>]))</li>
<li>            {</li>
<li>            <font color="#cc6633">$types_sum</font>[<font color="#cc6633">$source</font>][<font color="#cc6633">$stage</font>] += <font color="#cc6633">$time</font>;</li>
<li>            }</li>
<li>            <font color="#0000ff">else</font></li>
<li>            {</li>
<li>            <font color="#cc6633">$types_sum</font>[<font color="#cc6633">$source</font>][<font color="#cc6633">$stage</font>] = <font color="#cc6633">$time</font>;</li>
<li>            }</li>
<li>        }</li>
<li>    }</li>
<li>} </li>
</ol></font>



Может хитрость есть какая что-бы уродства такого избежать :)
  • Вопрос задан
  • 2565 просмотров
Пригласить эксперта
Ответы на вопрос 7
leonid239
@leonid239
Попробуйте изменить уровень предупреждений об ошибках: ru2.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting
Ответ написан
Комментировать
Ogra
@Ogra
$base = isset($types_sum[$source][$stage])? $types_sum[$source][$stage]: 0;
Ответ написан
taliban
@taliban
php программист
Думается мне это максимум =)
if( !isset($types_sum[$source][$stage]) )
    $types_sum[$source][$stage] = 0;
$types_sum[$source][$stage] += $time;
Ответ написан
Комментировать
@anitspam
инициализация переменной (или элемента массива) перед использованием — это не проблема. так что пусть будет как есть.

(хотя можно с умным видом предложить изменить архитектуру).
Ответ написан
ilyaplot
@ilyaplot
PHP программист
function append($src, $val){
Ответ написан
Как вариант:
<?php
//Высчитываем суммы
$types_sum = array();

foreach($types[$type] as $project)
{
        foreach($project as $source => $stages)
        {
                $stages_sum = array_fill_keys(array_keys($stages), 0);
                foreach($stages as $stage => $time)
                {
                        $stages_sum[$stage] += $time;
                }
                $types_sum[$source] = $stages_sum;
        }
}
Ответ написан
Комментировать
$var = &$types_sum[$source][$stage];
$var += $time;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы