在foreach循环中计数值仅返回1个结果

时间:2018-01-06 18:20:53

标签: php

我有这个代码从数据库中选择一些值,值是示例(-10,1.4,5.23,0.20,-1.45 .....),所以我需要将它们分为正,负和中性。 / p>

所以我这样做并且显示结果很好,但我无法计算它们中有多少,例如我有超过50个正值,但它只显示1,但如果我使用var_dump($一个);我得到了所有这些。

我如何计算每个if语句中有多少个值?

$stmt = $db->prepare("SELECT numbers FROM mytable WHERE uid = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();
$result = $stmt->fetchAll();
$cnt = $stmt->rowCount();

echo "Total entries " . $cnt . "<br>"; // returns total count of results

// var_dump($result);

foreach ($result as $rez) {
    $a = $rez['orderprofit']; // all values : positive, negative and neutral (zero)

    //var_dump($a);

    if ($a > 0) {
        var_dump($a);
        $positive_values = count($a); //(count($a) / $cnt)*100 . '%';
    } elseif ($a < 0) {
        $negative_values = $a;
    } elseif ($a == 0) {
        $neutral_values = $a;
    }
}

Var_dump会返回一个类似这样的结果,所以如果我尝试将阵列转换为字符串转换,那么任何数组都无法正常工作:

string(3) "0.9" string(3) "4.7" string(3) "6.9" string(3) "5.4" string(3) "5.4" 
string(3) "7.9" string(3) "5.9" string(5) "17.21" string(1) "5" string(3) "4.5" 
string(3) "4.7" string(1) "5" string(3) "5.4" string(3) "5.8" string(3) "5.9" 
string(3) "4.7" string(3) "5.4" string(3) "6.9" string(3) "4.5" string(1) "5" 
string(3) "4.7" string(3) "5.4"

好的,这是和图像,也许比这些数据更有帮助 enter image description here

4 个答案:

答案 0 :(得分:1)

您可以将值推送到数组中,然后count该数组中有多少个元素。

例如:

$positive_values = array();
$negative_values = array();
$neutral_values = array();

foreach ($result as $rez) {
    $a = $rez['orderprofit']; // all values : positive, negative and neutral (zero)

    if ($a > 0) {
        $positive_values[] = $a;
    } elseif ($a < 0) {
        $negative_values[] = $a;
    } elseif ($a == 0) {
        $neutral_values[] = $a;
    }
}

echo "count positive values : " . count($positive_values) . "<br />";
echo "count negative values : " . count($negative_values) . "<br />";
echo "count neutral values : " . count($neutral_values) . "<br />";

答案 1 :(得分:1)

您总是重置计数。如果$row['orderprofit']确实包含数值,则以下可能是一种好方法:

<?php

$positive_values = 0;
$negative_values = 0;
$neutral_values = 0;

foreach ($result as $row) {
    $a = $row['orderprofit'];


    if ($a > 0) {
        $positive_values++;
    } elseif ($a < 0) {
        $negative_values++;
    } elseif ($a == 0) {
        $neutral_values++;
    }
}

答案 2 :(得分:0)

  

声明$ positive_values,$ negative_values,$ neutral_values而不是count使用$ positive_values ++

count 计算数组中的所有元素或对象中的某些内容

答案 3 :(得分:0)

声明三个不同的变量,一个存储正值的计数($posi),一个存储空值的计数($zero),另一个存储负值的计数({ {1}})。在$nega循环内,检查当前值foreach并增加适当的变量。例如:

$a