虽然不计入数组

时间:2015-07-13 13:11:54

标签: php arrays

我在表格上有一些数据行,如下所示:

 +-------------------+-------+
 | criteria          | value |
 +-------------------+-------+
 | Pengalaman Kerja  |     4 |
 | Pendidikan        |     3 |
 | Usia              |     5 |
 | Status Perkawinan |     2 |
 | Alamat            |     6 |
 | Pengalaman Kerja  |     3 |
 | Pendidikan        |     1 |
 | Usia              |     4 |
 | Status Perkawinan |     2 |
 | Alamat            |     1 |
 +-------------------+-------+
 10 rows in set (0.00 sec)

我尝试使用fetch_object()在PHP中获取它们,然后将返回的数据转换为数组,并对表中列出的每个条件的值求和。 示例:Pengalaman kerja有两个值(4和3),因此Pengalaman Kerja数组的结果为7。

 $result      = $db->query($sql);
 $value       = array();

 while($row=$result->fetch_object()){

 if(!isset($value[$row->criteria]){
   $value[$row->criteria] = 0;
 })

   $value[$row->criteria] += $row->value;

   var_dump($value);
 }

当我将var_dump运行到$value(现在包含每个条件的总和值)时,它向我展示了:

 array(5) {
   ["Pengalaman Kerja"]=>
   int(7)
   ["Pendidikan"]=>
   int(4)
   ["Usia"]=>
   int(9)
   ["Status Perkawinan"]=>
   int(4)
   ["Alamat"]=>
   int(6)
 }

Pengalaman kerja是正确的,因为4 + 3 = 7 Pendidikan是正确的,因为3 + 1 = 4 Usia是正确的,因为5 + 4 = 9 Status Perkawinan是正确的,因为2 + 2 = 4 错误的是Alamat显示6它应该是7因为6 + 1 = 7

我确定这是因为Alamat记录中的一个记录位于最后一行,while()函数直到最后一行才计算。 While()函数仅计入最后一个 - 1

如何解决此问题,Alamat显示7,因为它被假设显示?

1 个答案:

答案 0 :(得分:1)

为什么甚至在PHP中这样做呢?如果您只想要按criteria分组的所有行的总和,那么使用简单的MySQL查询来完成它吗?

SELECT criteria, SUM(value) AS total FROM table GROUP BY criteria

编辑:如果您坚持按照自己的方式进行操作,那么除了代码中的一些拼写错误(这通常会导致运行时错误),您的代码应该按预期工作。当我针对具有完全相同数据的表运行它时,我得到了预期的结果。

BTW,PDOStatement没有名为fetch_object的方法(这是辅助函数的名称)所以如果你想使用一个方法来获取查询结果作为PDOStatement的对象你有使用fetchObject()的正确名称。

<强> PHP

$result = $dbh->query("SELECT * FROM test");
$value = array();

while ($row = $result->fetchObject()) {
    if (!isset($value[$row->criteria])) {
        $value[$row->criteria] = 0;
    }
    $value[$row->criteria] += $row->value;
}
var_dump($value);

<强>结果

array (size=5)
  'Pengalaman Kerja' => int 7
  'Pendidikan' => int 4
  'Usia' => int 9
  'Status Perkawinan' => int 4
  'Alamat' => int 7