#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
)