как исключить сумму массива формы элемента в php?

#php #arrays #sum

#php #массивы #сумма

Вопрос:

у меня есть этот массив:

 [Jessica CS] => Array
    (
        [2011-04-20] => Array
            (
                [0] => 69.90
                [cancel] => 1311145200
                [1] => 29.95
                [2] => 69.90
            )
    )

[Rex CS] => Array
    (
        [2011-04-20] => Array
            (
                [0] => 119.94
                [cancel] => 
            )

        [2011-04-26] => Array
            (
                [0] => 199.50
                [cancel] => 
                [1] => 29.95
            )
....
 

и я складываю эти значения с помощью цикла:

 $i=0;
foreach($dates as $d){
$total[$i]  = array_sum($value[$d]);
#i  ;
}
 

это добавит все вместе, и я хочу исключить [cancel] поле из добавления в array_sum

редактировать: я, вероятно, мог бы добавить значения, которые есть int , но не уверен, как их сортировать

есть идеи?

Спасибо

Ответ №1:

Лично я бы изменил макет массива, чтобы он больше походил на:

 [Jessica CS] => Array
    (
        [2011-04-20] => Array
            (
                [cancel] => 1311145200
                [costs] => Array
                    (
                        [0] => 69.90
                        [1] => 29.95
                        [2] => 69.90
                    )
                )
    )
 

Замена [затрат] на любое наиболее подходящее имя.

Работа с существующим массивом
В противном случае

 $i=0;
foreach($dates as $d){
    $total[$i]  = array_sum(array_diff_key($value[$d], array('cancel'));
    #i  ;
}
 

Комментарии:

1. я понимаю, но я застрял с этим так, как оно есть

2. это не работает, но я вижу, к чему вы клоните, я также проведу дополнительные исследования в этом направлении

3. в итоге я использовал unset . спасибо, что указали мне правильное направление

4. Примечание: Приведенный выше код не удалит индекс cancel . Похоже , вы делаете array_diff_key() и удаляете индекс 0 . Это должно быть $total[$i] = array_sum(array_diff_key($value[$d], array_fill_keys(['cancel', ...]));

Ответ №2:

Просто перебирайте массив, возможно, вот так:

 $input = array(
    'Jessica CS' => array(
        '2011-04-20' => array(
            0 => 69.9,
            'cancel' => 1311145200,
            1 => 29.95,
            2 => 69.90,
        ),
    ),
    'Rex CS' => array(
        '2011-04-20' => array(
            0 => 119.94,
            'cancel' => null,
        ),
        '2011-04-26' => array(
            0 => 199.50,
            'cancel' => null,
            1 => 29.95,
        )
    )
);

$totals = array();

foreach($input as $person => $dates){
    $totals[$person] = 0;
    foreach ($dates as $date => $values) {
        foreach ($values as $key => $val) {
            if ($key !== 'cancel') {
                $totals[$person]  = $val;
            }
        }
    }
}

print_r($totals)
 

Производит:

 Array
(
    [Jessica CS] => 169.75
    [Rex CS] => 349.39
)