2012-03-22 76 views
0

有可能是愚蠢的事情我做错了这里。PHP数组不更新

public function get_scores($id) 
{ 
    $results = array(); 
    $sql = "SELECT * FROM scores WHERE comp_id = $id"; 
    $rows = $this->db->query($sql)->result(); 
    foreach($rows as $row) { 
     if($row->confirmed_id) { 
      $results[$row->uid] += $row->score; 
     } 
    } 
    sort($results); 
    return $results; 
} 

所以基本上我想要做的就是添加的所有用户评分的数据库和排名的顺序返回。确认 - > ID只是一个检查,以确保得分已被确认(并因此可以添加到他们的总分)。我基本上只是试图建立一个关联数组,其中的关键是用户ID,并且他们在数据库中添加的每个问题的分数都被添加。查询工作正常,$ row-uid和$ row-> score都为每行返回正确的东西,但$ results []从来没有添加任何东西。如果我甚至改变它只是像上面的$ results [3] = 0这样愚蠢的东西,然后在for循环中使用$ results [3] ++或+ = 1,它不会将任何内容添加到$ results [3] 。

编辑:问题解决了。的确是一件愚蠢的 - 其confirmed_id是由我的合作伙伴设置为空时,他已重新运行我们的数据库后,我以前所有设置为1。谢谢你们:)

+0

你能只检查不“+”,即。 $ results [$ row-> uid] = $ row-> score; – 2012-03-22 04:31:13

+1

每行的'$ row-> confirmed_id'的值是多少?它真的是真的吗? – cHao 2012-03-22 04:32:31

+2

你有反对大括号或使用聚合SQL函数的东西吗?你的代码可以受益于这两个:) – 2012-03-22 04:33:51

回答

2

要添加到$结果[东西]它的存在了。您需要在第一种情况下创建它,然后在其存在时只增加它。

+0

+1好,但我不认为这是问题 – Phil 2012-03-22 04:39:35

+0

那么这是至少** **问题。 – 2012-03-22 04:41:53

+0

这不是 - 我已经在$ results [3] = 0的顶部添加了,并且它之前没有修复它。 [3]是我的测试用例,所有当前的用户都是。 – Paul 2012-03-22 04:42:34

0

您需要从代码中删除“+ =”操作。检查这一点。

public function get_scores($id) 
{ 
    $results = array(); 
    $sql = "SELECT * FROM scores WHERE comp_id = $id"; 
    $rows = $this->db->query($sql)->result(); 
    foreach($rows as $row) 
     if($row->confirmed_id) 
      $results[$row->uid] = $row->score; 
    sort($results); 
    return $results; 
} 

你以前的操作类似于

$results[$row->uid] = $results[$row->uid] + $row->score; 

所以不会值添加到您的行。

+1

这里有回声吗? – 2012-03-22 04:51:09