2016-04-20 69 views
1

我在這裏有一個新手問題,但我真的被困住了。我有一個來自數據庫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(theres 2 there)它返回我0或1 ...

我在這裏失蹤了什麼?有人可以幫忙嗎?

EDIT 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

回答

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

請注意,我用了三重平等操作===代替雙相等運算==的。

回到'1'或'0'時,您遇到的奇怪行爲可能是使用雙等號運算符的副作用,因爲它在評估表達式時不考慮數據類型。

+0

你走了!我說這是一件簡單的事情,有時我會爲我所遭遇的事情感到羞愧,但我認爲這是一個不斷髮展的過程!哈哈非常感謝你! –

+0

喲可能想'echo $ counter;',因爲它不是數組'print_r()'不會工作 – RiggsFolly

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

這也適用,謝謝你提供如此快速的回答,歡呼! –