【问题标题】:PHP array_sum outputs individual numbers rather than as a wholePHP array_sum 输出单个数字而不是整体
【发布时间】:2019-08-09 14:23:23
【问题描述】:

我有这个“优惠券”列表,每个都有一个唯一的“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);
    }
}

【问题讨论】:

  • $claimed = array($rowOrder['productid']); 也将是一个长度为 one 的数组。您可能希望将其推送到数组而不是将其分配给数组,然后单独使用count()array_sum() 将对包含许多数字的数组的所有值求和)。
  • 您应该显示更多代码 - 您是否从查询中获取此数据?如果是这样,你能分享那个代码吗?
  • 用附加信息更新了我的问题
  • 你怎么称呼SelectLst_ByUsrCustomerIDInfo?也显示该代码。
  • 再次更新问题

标签: php html mysql pdo


【解决方案1】:

执行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'];

【讨论】:

  • 我明白了,我需要在 for 循环中计数,感谢您的帮助。
【解决方案2】:

试试这个,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    相关资源
    最近更新 更多