计数多维数组的结果


Count results of a multidimensional array

我有一个新手问题,但我真的很困惑。我有一个来自数据库SELECT的多维数组,我需要的很简单,我正在做一个图形,其中包含每个用户指定的每列的结果数。

这里有一些代码可以澄清你的想法:

try {
            $pdo = new PDO('mysql:host=***; dbname=**;charset=utf8;', '***', '**');
        }catch(PDOException $err){
            echo "Erro:'n".$err->getMessage();
        }
        $sql = "SELECT * FROM results
                WHERE ra like '****'";
        $statement = $pdo->prepare($sql);
        $statement->execute();
        $result = $statement->fetchAll();
        $resultPgto = array_column($result, 'indicado_pgto');
        print_r($resultadoPgto);

这给我返回了这个数组:

    array(3) {
  [0]=>
  string(18) "Indicacao Invalida"
  [1]=>
  string(3) "Nao"
  [2]=>
  string(3) "Nao"
}

我需要计算等于Sim的结果,它应该返回0,但当我执行类似print_r($resultadoPgto == 'Sim');的操作时,它返回"1"。。。

另一个有趣的事实是,当我试图返回等于Nao的结果时(那里有2),它会返回0或1…

我在这里缺少什么?有人能帮忙吗?

编辑1:

对结果本身进行计数将返回数组的键数。

以下是您理解的全部结果。

    array(3) {
  [0]=>
  array(22) {
    ["dsadsad"]=>
    string(7) "***"
    [0]=>
    string(7) "****"
    ["nome_aluno"]=>
    string(25) "lore"
    [1]=>
    string(25) "ipsum"
    ["nome_indicado"]=>
    string(25) "lore"
    [2]=>
    string(25) "ipsum"
    ["indicado_inscrito"]=>
    string(18) "Indica��o Inv�lida"
    [3]=>
    string(18) "Indica��o Inv�lida"
    ["indicado_confirmado"]=>
    string(18) "Indica��o Inv�lida"
    [4]=>
    string(18) "Indica��o Inv�lida"
    ["indicado_presente"]=>
    string(18) "Indica��o Inv�lida"
    [5]=>
    string(18) "Indica��o Inv�lida"
    ["indicado_aprovado"]=>
    string(18) "Indica��o Inv�lida"
    [6]=>
    string(18) "Indica��o Inv�lida"
    ["indicado_matriculado"]=>
    string(18) "Indica��o Inv�lida"
    [7]=>
    string(18) "Indica��o Inv�lida"
    ["indicado_pgto"]=>
    string(18) "Indicacao Invalida"
    [8]=>
    string(18) "Indicacao Invalida"
    ["validacao_indicacao"]=>
    string(3) "N�o"
    [9]=>
    string(3) "N�o"
    ["validacao_desconto"]=>
    string(3) "N�o"
    [10]=>
    string(3) "N�o"
  }
  [1]=>
  array(22) {
    ["dsdsdasda"]=>
    string(7) "***"
    [0]=>
    string(7) "***"
    ["nome_aluno"]=>
    string(25) "lore"
    [1]=>
    string(25) "ipsum"
    ["nome_indicado"]=>
    string(23) "lore"
    [2]=>
    string(23) "ipsum"
    ["indicado_inscrito"]=>
    string(3) "Sim"
    [3]=>
    string(3) "Sim"
    ["indicado_confirmado"]=>
    string(3) "N�o"
    [4]=>
    string(3) "N�o"
    ["indicado_presente"]=>
    string(9) "EM ABERTO"
    [5]=>
    string(9) "EM ABERTO"
    ["indicado_aprovado"]=>
    string(9) "EM ABERTO"
    [6]=>
    string(9) "EM ABERTO"
    ["indicado_matriculado"]=>
    string(3) "N�o"
    [7]=>
    string(3) "N�o"
    ["indicado_pgto"]=>
    string(3) "Nao"
    [8]=>
    string(3) "Nao"
    ["validacao_indicacao"]=>
    string(3) "Sim"
    [9]=>
    string(3) "Sim"
    ["validacao_desconto"]=>
    string(3) "N�o"
    [10]=>
    string(3) "N�o"
  }
  [2]=>
  array(22) {
    ["asdasdsad"]=>
    string(7) "***"
    [0]=>
    string(7) "***"
    ["nome_aluno"]=>
    string(25) "lore"
    [1]=>
    string(25) "ipsum"
    ["nome_indicado"]=>
    string(15) "lore"
    [2]=>
    string(15) "ipsum"
    ["indicado_inscrito"]=>
    string(3) "Sim"
    [3]=>
    string(3) "Sim"
    ["indicado_confirmado"]=>
    string(3) "N�o"
    [4]=>
    string(3) "N�o"
    ["indicado_presente"]=>
    string(9) "EM ABERTO"
    [5]=>
    string(9) "EM ABERTO"
    ["indicado_aprovado"]=>
    string(9) "EM ABERTO"
    [6]=>
    string(9) "EM ABERTO"
    ["indicado_matriculado"]=>
    string(3) "N�o"
    [7]=>
    string(3) "N�o"
    ["indicado_pgto"]=>
    string(3) "Nao"
    [8]=>
    string(3) "Nao"
    ["validacao_indicacao"]=>
    string(3) "Sim"
    [9]=>
    string(3) "Sim"
    ["validacao_desconto"]=>
    string(3) "N�o"
    [10]=>
    string(3) "N�o"
  }
}

我唯一需要信息的字段是"indicado_pgto",这就是我做array_column() 的原因

我真正需要的是比较每个值并对其进行计数,以返回任何包含字符串'Sim'的位置,即使没有任何'Sim'字符串,它也会返回1

如果在SQL结果上使用array_column()后得到了这个数组,那么假设您的目标数组如下所示:

array(3) {
  [0]=>
  string(18) "Indicacao Invalida"
  [1]=>
  string(3) "Nao"
  [2]=>
  string(3) "Nao"
}

如果是这样的话,那么你应该能够做一些像这样简单的事情吗?

<?php
$counter = 0;
foreach ($resultadoPgto as $result) {
    if ($result === 'Nao') {
        $counter++;
    }
}
print_r($counter);

请注意,我使用了三相等运算符===而不是双相等运算符==

print_r($resultadoPgto == 'Sim')返回"1"或"0"时出现的奇怪行为可能是使用二重相等运算符的副作用,因为它在计算表达式时没有考虑数据类型。

这将统计数组中与指定值匹配的任何字段的出现次数。

function count_occ($array, $field, $content) {
    $cnt = 0;
    foreach( $array as $a) {
        if ($a[$field] = $content) { $cnt++; }
    }
    return $cnt;
}
echo count_occ($result, 'indicado_pgto', 'Sim');