我有此“优惠券”列表,每个列表都有一个唯一的“ 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);
}
}
答案 0 :(得分:2)
执行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'];
答案 1 :(得分:0)
尝试一下
$claimed = array();
foreach($products as $rowOrder){
array_push($claimed,$rowOrder['productid']);
}
echo count($claimed);
echo array_sum($claimed);die;