编码器将数组传递给视图,或使用foreach循环将数组转换为对象


Codeigniter pass array to view, or convert array to object with foreach loop

最近我遇到了一个问题,我需要从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']);