我会尽可能简单地将其分解,然后发布所有必要的代码。
目标:为所有用户获取一段时间内每个子时段的所有答案,而那些没有用户的所有答案将标记单元格(不要担心这部分)所以我可以稍后对其进行数据外推。
用户类:用户有一个ID和一个句点列表
期间类期间有一个Id和一个子期间列表
子时段类:子时段有一个ID和一个问题列表
问题类:每个问题都有答案
现在代码,前几个嵌套循环中的注释行是首先弄清楚的关键。每个实例中的第二行是我到目前为止的尝试。由于这两行都没有注释,我在这一行上收到错误:
$user->periods[$period]->addSubPeriod($period->periodId, $subPeriod);
话说: 注意:未定义的偏移:1 和 致命错误:在非对象上调用成员函数addSubPeriod()
$periods_arr = array(1, 2, 3, 4, 5);
$subPeriods_arr = array(1, 2);
$questionslist = array("q_1_1", "q_1_2", "q_2_1", "q_2_2", "q_3_1", "q_4_1", "q_5_1");
class User {
public $userId;
public $periods = array();
public function __construct($number) {
$this->userId = $number;
}
public function addPeriod($id, $pno)
{
$this->periods[$id] = new Period($pno);
}
}
class Period {
public $periodId;
public $subPeriods = array();
public function __construct($number)
{
$this->periodId = $number;
}
public function addSubPeriod($id, $spno)
{
$this->subPeriods[$id] = new SubPeriod($spno);
}
}
class SubPeriod {
public $subPeriodId;
public $answers = array();
public function __construct($number)
{
$this->subPeriodId = $number;
}
public function addAnswer($id, $answer)
{
$this->answers[$id] = new Question($answer);
}
}
class Question {
public $answer;
public function __construct($ans)
{
$this->answer = $ans;
}
public function getAnswer()
{
echo $this->answer;
}
}
$userlist = array();
$sql = 'SELECT user_ref FROM _survey_1_as GROUP BY user_ref ORDER BY user_ref ASC';
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
array_push($userlist, new User($row['user_ref']));
}
foreach ($userlist as &$user)
{
foreach ($periods_arr as &$period)
{
// set the current users ($user) period
// $user->addPeriod($user->userId, $period);
foreach ($subPeriods_arr as &$subPeriod)
{
// set the sub_period for the current users period
// $user->periods[$period]->addSubPeriod($period->periodId, $subPeriod);
foreach($questionslist as &$aquestion)
{
$sql = 'SELECT ' . $aquestion . ' FROM _survey_1_as WHERE user_ref = ' .
$user->userId . ' AND answer_period = ' . $period . ' AND answer_sub_period = ' .
$subPeriod .'';
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
$user->periods[$period]->subPeriods[$subPeriod]->addAnswer($row[$aquestion]);
}
}
}
}
}
答案 0 :(得分:0)
错误信息很多。您的数组没有索引为1的元素(未定义偏移量:1 ),因此尝试使用它与尝试执行$x = null; $x->doSomething();
相同,这当然会导致致命错误:在非对象上调用成员函数。
您可能需要var_dump($user->periods)
并仔细调试代码。