有效数组为foreach()

时间:2016-01-18 09:47:47

标签: php arrays codeigniter

我有以下foreach循环,它给出了无效的参数错误:

$all_students = $this -> model_accounts -> get_students_on_account($account['account_id']);

        foreach ($all_students as $student)
        {                               
            ...
        }

我尝试使用print_r进行调试以检查$ all_students数组的样子,结果得到了这个结果:

Array
(
    [0] => Array
        (
            [id] => 00062
            [student_name] => Reckless
            [student_surname] => Harmse
            [acc_id] => 198
            [dob] => 07-07-1993
            [gender] => Male
            [active] => 1
            [has_pic] => 1
            [avatar] => 106.jpg
            [pic_ver] => 1
            [student_identity_num] => 9307075052084
        )

)

所以数组就在那里,如print_r细节所示,它被视为一个数组。

我已经查看了其他类似的问题,但没有一个可以提供帮助。

提前完成

添加了: 模型功能用于吸引学生

function get_students_on_account($account_id)
{
    $data = '';     
    $this->db->where('acc_id', $account_id);
    $q = $this->db->get('students');

    if ($q->num_rows() > 0)
    {
        foreach ($q->result_array() as $row)
        {
            $row['dob'] = $this -> change_date_format($row['dob']);
            $data[] = $row;
        }
    }

    return $data;
}

3 个答案:

答案 0 :(得分:2)

在你的函数 get_students_on_account 中,替换为:

$data = '';     

由此:

$data = array();

这是持续返回数组所必需的。你不想要返回一个字符串。如果是这样,您所描述的问题就会发生。

答案 1 :(得分:1)

试试这个

$res = $q->result_array();    
foreach ($res as &$row)
{
    $row['dob'] = $this -> change_date_format($row['dob']);
}
return $res;

答案 2 :(得分:0)

试试这个

在控制器中

$all_students = $this->model_accounts->get_students_on_account($account['account_id']);

if($all_students == false){
    echo "Empty result";
}
else{
    foreach ($all_students[0] as $student)
    {                               
        ...
    }
}

在模型中

function get_students_on_account($account_id)
{
    $query = $this->db->query("SELECT * FROM students WHERE acc_id = $account_id");
    $result = $query->result_array();
    $count = count($result);

    if (empty($count)) {
        return false;
    }
    else{
        return $result;
    }

}