如何在php中执行foreach循环?
我有一个具有查询和foreach循环的函数:如何在php中执行foreach循环?,php,oop,zend-framework,foreach,Php,Oop,Zend Framework,Foreach,我有一个具有查询和foreach循环的函数: $sql = "SELECT * FROM explore WHERE id = $id"; $object = $this->db->select($sql); foreach($object as $val){ $results = array('id'=>$val->id, 'from_id'=>$val->from_id); $this->result[] = $this->n
$sql = "SELECT * FROM explore WHERE id = $id";
$object = $this->db->select($sql);
foreach($object as $val){
$results = array('id'=>$val->id, 'from_id'=>$val->from_id);
$this->result[] = $this->notify($results);
}
return $results;
这里的问题是,如果我返回$object,我会得到2条记录:
Array
(
[0] => stdClass Object
(
[from_id] => 6
[id] => 3
)
[1] => stdClass Object
(
[from_id] => 6
[id] => 1
)
)
返回$results有1条记录:
Array
(
[id] => 1
[from_id] => 6
)
如果我返回$this->result$此->结果[]=$this->notify$results;运行两次,但使用$results返回的同一记录两次,而不是使用$object中的两条记录
希望你们能理解我的问题
ps:我正在使用zend框架
有什么想法吗
编辑:notify是另一个类中的函数$getResults未在代码中的任何位置设置,可见。看起来您应该返回$this->result,因为结果存储在那里。考虑到你给我们的代码量,这是我最好的猜测。如果你能提供更多的代码,我可以进一步更新我的答案,如果它不适合你
根据您的评论,将代码更新为:
$sql = "SELECT * FROM explore WHERE id = $id";
$object = $this->db->select($sql);
foreach($object as $val){
$results = array('id'=>$val->id, 'from_id'=>$val->from_id);
$this->result[] = $this->notify($results);
}
return $this->result;
如果只返回$results,它将被最后一项填充,而不是每个项。出现问题的原因是在foreach循环的每次迭代中重新定义$results数组,而不是向其中添加元素 这就是问题所在:
//...
foreach($object as $val){
$results = array('id'=>$val->id, 'from_id'=>$val->from_id);
//... ^ you are reassigning the whole value of $results
改为这样做:
//...
$results = array();
foreach($object as $val){
$results[] = array('id'=>$val->id, 'from_id'=>$val->from_id);
//... ^^ note the array push instead of complete reassign
正如@Cyclone正确指出的那样,上述答案事实上是错误的。你需要做两件事中的一件:
返回$this->result而不是$results
用处理后的数据填充$results变量,而不是$this->result。
本质上,您需要改变:
return $results;
致:
或者,将循环更改为:
$results = array();
foreach($object as $val){
$results[] = $this->notify(array('id'=>$val->id, 'from_id'=>$val->from_id));
}
您想做哪一个取决于您是否确实需要$this->result,即在执行此代码后是否需要将结果保存在对象中。变量$getResults和$this->result来自何处,以及$this->notify是什么?您希望生成的数组是什么样子的?对不起,您到底在哪里为$getResults赋值?我的错,我说的是$results,请将这个问题排列起来,这是一个有效的问题,如果我们检查一下我的一些键入错误,您的具体问题是什么?您所描述的问题,只是告诉您的代码按照它应该的方式工作。很明显,它不是你所期望的,那么你期望它做什么呢?您想做什么?return$this->result的问题是我得到了两个结果,但它们使用$results的第一个结果,而不是使用数组中的两个结果$结果在数组中有两个结果:0和1。return$this->result将使用0两次-1,结果数组应该在每次传递时通过$this->notify函数,正如您在OP的代码中看到的那样。修正了这一点,我将改变我的投票,公平地说,你是绝对正确的,我已经编辑了我的答案,并且+1了你的答案。没有完全关注整个代码,总是一个错误…返回$this->result的问题;我得到了两个结果,但它们使用$results中的第一个结果,而不是使用数组中的两个结果$结果在数组中有两个结果:0和1。返回$this->result;将使用0twice@Patrioticcow:那么这听起来像是其他地方代码中的一个问题。$this->notify做什么?$this->notify返回一些其他内容
$results = array();
foreach($object as $val){
$results[] = $this->notify(array('id'=>$val->id, 'from_id'=>$val->from_id));
}