我正在使用PHP编写报表,以提取订单数据,其中包含客户类型和订单信息,例如总订单价值。我需要按客户类型汇总数据。在给定的一天,我不知道将要订购哪些客户类型,因此主动声明每种可能类型的变量似乎是不必要的。我知道还有另一种方法,我只是想不通。
使用下面的代码,我得到正确的信息-订单数量和按客户类型划分的总价值。但是我不断收到来自PHP的“未定义索引”通知。我已经研究了变量变量,尽管这似乎是我要寻找的解决方案,但我不知道如何将它们应用于数组。下面是我要实现的目标的简化示例。
$array = [
["type"=>"WOW","order_no"=>1,"value"=>10],
["type"=>"WOW","order_no"=>8,"value"=>20],
["type"=>"DLR","order_no"=>10,"value"=>100],
["type"=>"DLR","order_no"=>2,"value"=>50],
["type"=>"WOW","order_no"=>3, "value"=>25]
];
$totalorders = 0;
$totalvalue = 0;
foreach($array as $k=>$v)
{
$custype = isset($v['type']) ? $v['type'] : null;
$ordervalue = isset($v['value']) ? $v['value'] : null;
$final[$custype]["orderdollars"] = $final[$custype]["orderdollars"] + $ordervalue;
$final[$custype]["ordercount"]++;
$totalorders++;
}
print_r($final);
如何在循环中创建有效的$custype
变量,以避免出现“未定义索引”通知?
答案 0 :(得分:0)
由于$final
是一个二维数组,因此您将获得未定义的索引错误,并且必须先创建第一个维度($custype
),然后才能添加第二个维度(orderdollars
和ordercount
)。因此,您需要检查第一个维度是否存在,如果不存在,请创建它,否则将其添加到值中:
foreach($array as $k=>$v)
{
$custype = isset($v['type']) ? $v['type'] : null;
$ordervalue = isset($v['value']) ? $v['value'] : null;
if (!isset($final[$custype])) {
$final[$custype] = array('orderdollars' => $ordervalue, 'ordercount' => 1);
}
else {
$final[$custype]["orderdollars"] = $final[$custype]["orderdollars"] + $ordervalue;
$final[$custype]["ordercount"]++;
}
$totalorders++;
}
输出:
Array
(
[WOW] => Array
(
[orderdollars] => 55
[ordercount] => 3
)
[DLR] => Array
(
[orderdollars] => 150
[ordercount] => 2
)
)
注意
我不确定您要使用
实现什么$custype = isset($v['type']) ? $v['type'] : null;
但是使用类似的东西可能更合适
if (!isset($v['type']) || !isset($v['value'])) continue;