计算多维数组

时间:2016-04-20 17:12:23

标签: php

我这里有一个新手问题,但我真的被困了。我有一个来自数据库的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

2 个答案:

答案 0 :(得分:1)

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

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');

答案 1 :(得分: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'时遇到的奇怪行为可能是使用双等式运算符的副作用,因为在计算表达式时它不会考虑数据类型。