警告:使用foreach时非法字符串偏移

时间:2014-05-18 23:07:21

标签: php sql arrays string function

在我的申请中,我试图用foreach打印信息。 SQL编写正确。当我执行var_dump我的功能时,我会得到正确的信息:

$eventgroupinfo = $event->GetEventGroupInfoByEventGroupId($event_group_id);
var_dump($eventgroupinfo);

当我尝试将其打印出来时,它会出现此错误:

  

警告:非法字符串偏移

但是当我var_dump时我得到了这些信息。我做错了什么?

FOREACH

foreach ($eventgroupinfo as $g) {
  echo $g['user_id'] . $g['avatar'];
}

功能:

public function GetEventGroupInfoByEventGroupId($event_group_id)
{
    $db = new Db();

    $select = "SELECT
        p.event_progress_id,
        p.user_id,
        p.event_progress_distance,
        p.event_progress_date,
        p.event_group_id,
        u.user_id,
        u.name,
        u.surname,
        u.avatar
    FROM tblevent_progress p INNER JOIN tblusers u ON p.user_id = u.user_id  
    WHERE p.event_group_id = " . $event_group_id ;

    var_dump($select);
    $result = $db->conn->query($select);
    return $data=$result->fetch_assoc();
    }
}

VAR_DUMP结果

array (size=8)
'event_progress_id' => string '1' (length=1)
'user_id' => string '1' (length=1)
'event_progress_distance' => string '2532' (length=4)
'event_progress_date' => string '2014-05-10 12:48:27' (length=19)
'event_group_id' => string '50' (length=2)
'name' => string 'Vandenbergh' (length=11)
'surname' => string 'Jan' (length=3)
'avatar' => string '139404100.jpg' (length=21)

2 个答案:

答案 0 :(得分:1)

只需:

echo   $eventgroupinfo['user_id'] . $eventgroupinfo['avatar'];

而不是

foreach ($eventgroupinfo as $g) {
   echo   $g['user_id'] . $g['avatar'];
}

<强> P.S。 : 由于$eventgroupinfo是一维数组,您正在迭代它:

'event_progress_id'->'user_id'->...->'avatar'

因此$g属于string类型而不是array所以不应该像$g['user_id']那样访问$g

答案 1 :(得分:0)

你的foreach循环将为数组中的每个元素执行一次。在您的情况下,您将对每个进行迭代:

'event_progress_id'
'user_id'
'event_progress_distance'
'event_progress_date'
'event_group_id'
'name'
'surname'
'avatar'

如果您期望多个结果集(看起来像你想的那样),那么您需要从函数调用中返回一个多级数组:

public function GetEventGroupInfoByEventGroupId($event_group_id)
    {
        $db = new Db();

                $select = "SELECT

                            p.event_progress_id,
                            p.user_id,
                            p.event_progress_distance,
                            p.event_progress_date,
                            p.event_group_id,
                            u.user_id,
                            u.name,
                            u.surname,
                            u.avatar


                        FROM tblevent_progress p INNER JOIN tblusers u ON p.user_id = u.user_id  
                        WHERE p.event_group_id = " . $event_group_id ;

        var_dump($select);
        $result = $db->conn->query($select);
        $entries = array();            
        while($data=$result->fetch_assoc())
        {
            $entries[] = $data;
        }
        return $entries;
    }

然后你的循环应该为数据库中的每个条目输出一个实例。