PHP вычисляет текущую сумму из массива на основе значения даты - PullRequest
0 голосов
/ 08 декабря 2011

Мне нужно создать функцию PHP, которая будет циклически проходить по многомерному массиву и возвращать значение, представляющее сумму определенного ключа, где значение другого ключа <= значение даты, переданное в функцию.Вот пример массива данных массива: </p>

Array
(
[Nov 18, 2011] => Array
    (
        [C] => 100
        [I] => 100
        [M] => 100
    )
[Nov 22, 2011] => Array
    (
        [C] => 200
        [I] => 200
    )
[Nov 29, 2011] => Array
    (
        [C] => 300
        [I] => -300
    )
)

Никогда не будет больше, чем эти 3 категории [C], [I] и [M], и значения для каждой даты следует считать текущимисумма.

Итак, как рассчитать значение категории [C] на дату 22 ноября 2011 года?Правильное значение, конечно, 300. (Быть 100 от 18 ноября + 200 от 22 ноября)

Что если мне нужно вычислить значение [I] по состоянию на 29 ноября 2011 года?Правильный ответ в этом примере будет 0. (Быть 100 + 200 - 300)

Я открыт для идей о том, как лучше всего достичь этого.Мой инстинкт - иметь какую-то функцию, а затем передавать значения категории и даты.Благодаря.

1 Ответ

2 голосов
/ 08 декабря 2011

Зависит от того, сколько раз вы, вероятно, захотите это сделать, и нужно ли вам делать это для каждой категории и т. Д., Используете ли вы функцию или просто цикл.

В любом случае, вы можете поместить следующее в функцию и просто передать $ target_date и категорию (заменяя жестко закодированную букву «C», которую я использую для этого примера):

$c_total = 0;
foreach($main_array as $date => $sub_array)
{
    if($date <= $target_date)
    {
        $c_total += $sub_array["C"];
    }
}

РЕДАКТИРОВАТЬ: для ясностивот функция, использующая strtotime () для преобразования значений даты в метки времени для более простого сравнения:

function getCategoryTotal($target_date, $category)
{
    $c_total = 0;
    $target_date = strtotime($target_date);
    foreach($main_array as $date => $sub_array)
    {
        if(strtotime($date) <= $target_date)
        {
            $c_total += $sub_array[$category];
        }
    }
    return $c_total;
}
...