如何在PHP的循环内创建动态变量?

时间:2019-09-30 20:54:38

标签: php

我正在使用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变量,以避免出现“未定义索引”通知?

1 个答案:

答案 0 :(得分:0)

由于$final是一个二维数组,因此您将获得未定义的索引错误,并且必须先创建第一个维度($custype),然后才能添加第二个维度(orderdollarsordercount)。因此,您需要检查第一个维度是否存在,如果不存在,请创建它,否则将其添加到值中:

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

Demo on 3v4l.org

注意

我不确定您要使用

实现什么
$custype = isset($v['type']) ? $v['type'] : null;

但是使用类似的东西可能更合适

if (!isset($v['type']) || !isset($v['value'])) continue;