【问题标题】:Codeigniter pass array to view, or convert array to object with foreach loopCodeigniter 将数组传递给视图,或使用 foreach 循环将数组转换为对象
【发布时间】: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


【解决方案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'] 变量的样子。在设置$data['record'] 之后立即使用print_r($data['record']);

【讨论】:

  • tnx 很多。它真的帮助了我。
猜你喜欢
  • 2020-02-25
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
相关资源
最近更新 更多