我有这个数组$city:
Array
(
[0] => Array
(
[0] => fr
[1] => paris
[2] => FR-J
[3] => 0
[4] => 116729
[5] => 0
[6] => 0
)
[1] => Array
(
[0] => fr
[1] => marseille
[2] => FR-U
[3] => 0
[4] => 12898
[5] => 0
[6] => 0
)
[2] => Array
(
[0] => fr
[1] => lyon
[2] => FR-V
[3] => 0
[4] => 8608
[5] => 0
[6] => 0
)
[3] => Array
(
[0] => fr
[1] => nice
[2] => FR-U
[3] => 0
[4] => 6838
[5] => 0
[6] => 0
)
等等……我想对$city[$key][4]求和,生成如下内容:
Array
(
[0] => Array
(
[0] => FR-J
[1] => 116729
)
[1] => Array
(
[0] => FR-U
[1] => 19736
)
[2] => Array
(
[0] => FR-V
[1] => 8608
)
我是这样做的:
$totals = array();
foreach ($city as $key => $value) {
if (isset($city[$key][3])){
$totals[$key][0] = $city[$key][2];
$totals[$key][1] += (int) $city[$key][4]; '' <-- this line
} else {
$totals[$key][0] = $city[$key][2];
$totals[$key][1] = (int) $city[$key][4];
}
}
但是它生成了这个数组,但是在注释的行上有sum和Undefined offset: 1
。我能帮上忙吗?感谢。
$sum = [];
foreach($city as $value) {
if(!isset($sum[$value[2]]))
$sum[$value[2]] = 0;
$sum[$value[2]] += $value[4];
}
$results = [];
foreach($sum as $key => $value)
$results[] = [$key,$value];
print_r($results);
为什么不先设置它,初始化为0呢?这样你就不会有未定义的索引错误。考虑这个例子:
$new_values = array();
foreach($original_values as $key => $value) {
if(!isset($new_values[$value[2]][1])) $new_values[$value[2]][1] = 0;
$new_values[$value[2]][0] = $value[2];
$new_values[$value[2]][1] += $value[4];
}
$new_values = array_values($new_values);
这会解决你的问题。
$new_values = array();
foreach($original_values as $key => $value) {
if(false == isset($new_values[$value[2]][1])) {
$new_values[$value[2]][1] = 0;
}
$new_values[$value[2]][0] = $value[2];
$new_values[$value[2]][1] += $value[4];
}
$new_values = array_values($new_values);
在if语句中也使用括号,这是我们社区的最佳实践
try this:
$totals = array();
foreach ($city as $key => $value) {
$totals[$key][0] = $city[$key][2];
if(!isset($totals[$key][1]))
$totals[$key][1] = 0;
$totals[$key][1] += (int) $city[$key][4];
}