【发布时间】:2014-08-30 14:42:48
【问题描述】:
最近我遇到了一个问题,我需要从 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; ?>
【问题讨论】:
-
在生成
$email_raw的最后,使用$email_raw = (object)$email_raw;。整个$email_raw变量变成了对象。 -
为什么要生成对象而不是数组?数组可以正常工作,而且通常用途更广泛。
-
我认为您将其误认为是关联数组,否则无需将数组转换为对象,因为在您的情况下这两者的用法没有区别。
-
@machineaddict 我试过了,但视图的输出显示:stdClass 类的对象无法转换为字符串。有没有办法可以直接在 foreach 循环中生成 $email_raw 作为对象?
-
@Dan 和 MahanGM,CodeIgniter 视图说我必须使用一个对象,否则它会说:调用非对象中的成员函数 result()
标签: php arrays codeigniter object foreach