繁体   English   中英

PHP array_sum输出单个数字而不是整体

[英]PHP array_sum outputs individual numbers rather than as a whole

我有此“优惠券”列表,每个列表都有一个唯一的“ productid”

优惠券

现在,我尝试使用以下方法将列表转换为数组:

$claimed = array($rowOrder['productid']);

我的问题是,当我尝试使用“ count”和“ array_sum”时,它会输出单个数字:

$count_claimed = array(count($claimed));
echo array_sum($count_claimed);

使用得到的回波并输出:“ 1111111”我应该更改什么以使总计数为7? (显示为带有“优惠券”的数量)

附加信息:

SELECT语句正在输出“优惠券”, $rowOrder正在调用它。

public function SelectLst_ByUsrCustomerIDInfo($db, $usrcustomerid) {
    $stmt = $db->prepare(
      " SELECT o.orderid, o.productid, o.usrcustomerid, o.amount, o.amountrefunded, o.createddate, o.scheduleddate, o.useddate, o.expirationdate, p.photosrc
        FROM `order` o LEFT JOIN `product` p ON o.productid = p.productid

        WHERE usrcustomerid = :usrcustomerid"
    );

    $stmt->bindValue(':usrcustomerid', $usrcustomerid, PDO::PARAM_INT);
    $stmt->execute();
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    return $rows;
}

这样叫

$lstInfo = $mcOrder->SelectLst_ByUsrCustomerIDInfo($db, $usrcustomerid);
foreach($lstInfo as $rowOrder) {
    if (isset($rowOrder['productid']) && ($rowOrder['expirationdate'] >  date("Y-m-d H:i:s"))) {
        $claimed = array($rowOrder['productid']);
        $count_claimed = array(count($claimed));
        echo array_sum($count_claimed);
    }
}

进行count($lstInfo)您将获得提取的行的总数( PDOStatement::fetchAll()返回一个数组,您只计算其中的元素数)。 然后,您可以循环执行结果,并在条件为真时递增名为$claimed的变量。

$lstInfo = $mcOrder->SelectLst_ByUsrCustomerIDInfo($db, $usrcustomerid);
$total = count($lstInfo);
$claimed = 0;
foreach($lstInfo as $rowOrder) {
    if (isset($rowOrder['productid']) && ($rowOrder['expirationdate'] >  date("Y-m-d H:i:s"))) {
         $claimed += 1;
    }
}
echo "Claimed $claimed of $total.";

更好的是,您可以使用COUNT()和添加的WHERE条件在一个查询中完成此操作。 这意味着您将无法获得总数,但这似乎并不是从任何一个开始的问题。

$stmt = $db->prepare("SELECT COUNT(productid) as cnt
                      FROM `order` o 
                      LEFT JOIN `product` p 
                           ON o.productid = p.productid
                      WHERE usrcustomerid = :usrcustomerid
                       AND expirationdate > NOW()
                      GROUP BY usrcustomerid");
$stmt->execute([":usrcustomerid" => $usrcustomerid]);
$result = $stmt->fetch();
echo "Claimed ".$result['cnt'];

尝试这个,

$claimed = array();
foreach($products as $rowOrder){
    array_push($claimed,$rowOrder['productid']);
}
echo count($claimed);
echo array_sum($claimed);die;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM