我有以下对象数组:
Array
(
[0] => Array
(
[0] => stdClass Object
(
[Sales] => 4
)
[1] => stdClass Object
(
[Sales] => 6
)
[2] => stdClass Object
(
[Sales] => 5
)
)
[1] => Array
(
[0] => stdClass Object
(
[Sales] => 8
)
[1] => stdClass Object
(
[Sales] => 7
)
[2] => stdClass Object
(
[Sales] => 7
)
)
[2] => Array
(
[0] => stdClass Object
(
[Sales] => 5
)
[1] => stdClass Object
(
[Sales] => 7
)
[2] => stdClass Object
(
[Sales] => 6
)
)
[3] => Array
(
[0] => stdClass Object
(
[Sales] => 5
)
[1] => stdClass Object
(
[Sales] => 6
)
[2] => stdClass Object
(
[Sales] => 6
)
)
[4] => Array
(
[0] => stdClass Object
(
[Sales] => 4
)
[1] => stdClass Object
(
[Sales] => 5
)
[2] => stdClass Object
(
[Sales] => 11
)
)
)
我想获得每个对象的总销售额。所以我写了这段代码:
public function getChannelsSales ($ChannelSales) {
$totalChannelSales = array();
$i = 0;
foreach ($ChannelSales as $ChSales) {
foreach ($ChSales as $value) {
$totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales;
}
++$i;
}
return $totalChannelSales;
}
运行代码后,我得到了正确的答案:
Array
(
[0] => 15
[1] => 22
[2] => 18
[3] => 17
[4] => 20
)
但是,我也在呻吟声中收到以下消息:
Notice: Undefined offset: 0 in ...'Sales.php on line 174
Notice: Undefined offset: 1 in ...'Sales.php on line 174
Notice: Undefined offset: 2 in ...'Sales.php on line 174
Notice: Undefined offset: 3 in ...'Sales.php on line 174
Notice: Undefined offset: 4 in ...'Sales.php on line 174
第 174 行是这样的:
$totalChannelSales[$i] = $totalChannelSales[$i] + $value->Sales;
而且如果连答案都是正确的,我也不明白问题出在哪里(正如你可以自己总结的那样)
知道吗?
编辑:
我得到了一个解决方案,增加了两行
$totalChannelSales[0] = 0;
- 创建数组后和第一个 foreach 之前一次
- 在第一个 foreach 结束后,两者之间的第二次
数组将从循环中逐个填充您的值。您不需要添加它。
使用以下代码。
$totalChannelSales[$i] = $value->Sales;
我想你的问题就在这里
$totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales;
您正在尝试设置甚至不存在的索引,您可以使用array_push,它将推送元素并迭代索引。
我将引导您完成代码以找出错误:
foreach ($ChannelSales as $ChSales) {
foreach ($ChSales as $value) {
$totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales;
}
++$i;
}
现在在上面的代码中,假设在 $i = 0 时您处于第一个循环中,此时$totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales;
将被$totalChannelSales[0] = $totalChannelSales [0] + $value->Sales;
,因此它将获取$totalChannelSales [0] 值,该值此时不存在,对于 $i 的其他值也是如此。
$totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales;
在上面的代码中,右侧没有为$totalChannelSales [$i]
定义任何值。您只需要下面的分配。
$totalChannelSales[$i] = $value->Sales;
已编辑:
我引入了一个临时变量$tempsum它将删除所有未定义的问题。
public function getChannelsSales ($ChannelSales) {
$totalChannelSales = array();
$i = 0;
foreach ($ChannelSales as $ChSales) {
$tempsum = 0;
foreach ($ChSales as $value) {
$tempsum += $value->Sales;
}
$totalChannelSales[$i] = $tempsum;
$i++;
}
return $totalChannelSales;
}