2016-04-26 60 views
1

未定义抵消我有以下对象数组:注意:在循环抛出对象的数组用foreach

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 
) 

但是我得到的也是在froint结尾出现下列信息:

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
  • 之前在两者之间的第二时间增加两倍的线得到的溶液对于每个AFTER的第一个foreach结束
+1

write $ totalChannelSales [$ i] = $ value-> Sales; – RJParikh

+2

'$ totalChannelSales [$ i] = $值 - >销售;' –

回答

1

数组将从循环中逐个填充您的值。你不需要添加它。

使用下面的代码。

$totalChannelSales[$i] = $value->Sales; 
+0

对不起您的解决方案给出了错误的答案: 我需要添加每个通道(15,22,18和20) 的所有销售如果我使用你的解决方案,我只得到每个频道的最后一个销售(5,7,6,6和11) –

0

我猜你的问题是在这里

$totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales; 

您正在尝试设置甚至不存在,您可以使用array_push这一点,它会推元素和迭代指标指数。

0

我将带您通过您的代码找出错误:在上面的代码

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值也是如此。

0
$totalChannelSales[$i] = $totalChannelSales [$i] + $value->Sales; 

在上面的代码中,没有为右侧的$totalChannelSales [$i]定义值。你只需要低于Assignement。

$totalChannelSales[$i] = $value->Sales; 
0

编辑:

我已经介绍了一个临时变量$ 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; 
} 
+0

我做到了,但它仍然给予了一次消息: 注意:未定义偏移量:4 .. 。\ Sales.php 174行 –

+0

您可以试试$ i ++来代替++ $ i,只是一个尝试。 – naf4me

+0

@RafaelMunoz我编辑了代码。这将解决问题,而不会引入更多的赋值。 – naf4me