最近我遇到了一个问题,我需要从CodeIgniter PHP foreach循环生成一个对象。基本上,我需要过滤我的电子邮件列表,并根据结果生成对象,然后将其传递给视图,并使用另一个foreach循环列出那里的内容。
这是我所拥有的,它成功地生成了一个数组$email_raw,但我找不到正确的方法来生成它作为一个对象:
PHP: $email_preliminary=$this->db->select('email')->get('user');
$email_raw = array();
foreach ($email_preliminary->result() as $row):
$email_to_test=$row->email;
if(filter_var($email_to_test, FILTER_VALIDATE_EMAIL)||preg_match('/'d*[1-9]'d*/', $email_to_test))
{
$email_raw[] = $email_to_test;
}
else{
}
endforeach;
人们建议我使用:
$email_raw[] = (object)array('email'=>$email_to_test);
但是错误消息说它不是一个对象。
我可以生成$email_raw作为一个对象,所以我可以把它传递给视图,并使用foreach列出的内容在那里吗?
多谢!
更新:每个请求,这里是控制器的其余部分:
$data['record']=array_unique($email_raw);
$this->load->view('login&signup/signup_test_get_wrong_email_view', $data);
和我使用的视图:
<?php foreach ($record->result() as $row): ?>
<span><?php echo $row->email; ?></span><br>
<?php endforeach; ?>
foreach可以迭代对象和数组。你不需要将数组转换为对象。
保持控制器与上面一样:
$email_preliminary=$this->db->select('email')->get('user');
$email_raw = array();
foreach ($email_preliminary->result() as $row):
$email_to_test=$row->email;
if(filter_var($email_to_test, FILTER_VALIDATE_EMAIL)||preg_match('/'d*[1-9]'d*/', $email_to_test))
{
$email_raw[] = $email_to_test;
}
else{
}
endforeach;
// ... code
$data['record']=array_unique($email_raw);
$this->load->view('login&signup/signup_test_get_wrong_email_view', $data);
在视图中,你只需迭代你刚刚构造的数组:
<?php foreach ($record as $email): ?>
<span><?php echo $email; ?></span><br>
<?php endforeach; ?>
我猜你的怀疑来自于不知道$data['record']
变量是什么样的。设置完$data['record']
后立即使用print_r($data['record']);