Php Codeigniter foreach循环未正确读取数据库

Php Codeigniter foreach循环未正确读取数据库,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个简单的嵌套foreach循环,它应该从数据库中读取一个起始值currentNumber,从不同的表中获取另一个值$co['count'],将这两个值相加newCount,并更新初始值 问题是,在初始查询数据库时,循环将该值设置为某个随机(但一致)值。奇怪的是,如果我在第二次运行时运行控制器方法两次,它的行为与预期的一样。当我正确输入authorlist数据时,似乎没有正确设置默认值零。如果我创建authorlist,然后通过phpmyadmin手动将count值编辑为零,则一切正常 这是

我有一个简单的嵌套foreach循环,它应该从数据库中读取一个起始值
currentNumber
,从不同的表中获取另一个值
$co['count']
,将这两个值相加
newCount
,并更新初始值

问题是,在初始查询数据库时,循环将该值设置为某个随机(但一致)值。奇怪的是,如果我在第二次运行时运行控制器方法两次,它的行为与预期的一样。当我正确输入
authorlist
数据时,似乎没有正确设置默认值零。如果我创建
authorlist
,然后通过phpmyadmin手动将
count
值编辑为零,则一切正常

这是我的控制器:

foreach($authors as $key => $list){
    foreach($coauthors as $key => $co){
        $searchword = $list['author'];
    $id = $list['id'];
        $matches = array_filter($co, function($var) use ($searchword) { return preg_match("/\b$searchword\b/i", $var); });
    if($matches){
            $currentNumber = $this->csv_model->get_number($id);

        $newCount = $currentNumber + $co['count'];
            $data = array(
                'count'=> $newCount,
            );
            $this->csv_model->update_number($list['id'], $data);
        }
    }
}
没有风景。模型如下:

function get_number($id) {     
    $this->db->select('count');
    $this->db->where('id', $id);

    $query = $this->db->get('authorlist');
    $ret = $query->row();
    return $ret->count;
}
function update_number($id, $data)
{
    $this->db->where('id', $id);
    $this->db->update('authorlist', $data);
}
因为我认为这可能是db表的一个问题,所以这里的sql表只有4个条目

-- phpMyAdmin SQL Dump
-- version 3.5.8.1deb1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jun 26, 2014 at 02:30 PM
-- Server version: 5.5.32-0ubuntu0.13.04.1
-- PHP Version: 5.4.9-4ubuntu2.3

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

-- Database: `authors`

-- Table structure for table `authorlist`

CREATE TABLE IF NOT EXISTS `authorlist` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `author` varchar(255) NOT NULL,
  `count` int(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

-- Dumping data for table `authorlist`


INSERT INTO `authorlist` (`id`, `author`, `count`) VALUES
(1, 'adam', 0),
(2, 'adams', 0),
(3, 'ahmed, m', 0),
(4, 'staz', 0);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

编辑

循环第一次运行时生成的看似随机的数字不是随机的。原来这个数字是循环运行的总和。有点难以描述,但我粘贴了一些代码,这些代码是我从一位作者的内部循环打印出来的。您可以看到,起始值与所有加法的总和相同,即正好是最终值的一半。这是怎么发生的

current 1255 //this should read zero form the initial construction of the table
to add 653
new sum 1908
current 1908
to add 302
new sum 2210
current 2210
to add 300
new sum 2510

我看不出代码有什么问题,但也许您可以添加一个
var_dump($currentNumber,$co['count'],$newcount)
$data=array()
之前,这样您就可以很容易地看到这些值是什么,哪些值与您期望的值不同。。。如果您需要更多帮助,那么我需要能够运行您的代码,
$authors
$coauthors
的价值是什么,您没有粘贴代码的这一部分…@RubendeVries谢谢。我已经在回显这些值,但是var_转储显示以下输出
string(3)“504”string(3)“252”int(756)
。问题出在“504”上,在方法运行之前,它被设置为null,因此应该从零开始。我不知道怎么做,但它似乎做了求和,然后在另一个循环中使用它。我必须比我想象的多做一个循环?