最近我遇到了一个问题,我需要从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);
但错误消息msg表示它不是一个对象。
我可以通过其他方式生成$ 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; ?>
答案 0 :(得分:1)
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']
变量的样子。在设置print_r($data['record']);
后立即使用$data['record']
。