PHP array_sum выводит отдельные числа, а не в целом - PullRequest
1 голос
/ 19 марта 2019

У меня есть этот список "купонов", каждый из которых имеет уникальный "productid"

coupons

Теперь я пытаюсь преобразовать список в массивиспользуя:

$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);
    }
}

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Делая 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'];
0 голосов
/ 19 марта 2019

Попробуйте это,

$claimed = array();
foreach($products as $rowOrder){
    array_push($claimed,$rowOrder['productid']);
}
echo count($claimed);
echo array_sum($claimed);die;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...