PHP illegal offset type Fehler
Immer eine illegal offset type Fehler auf dieser Zeile in der zweiten foreach-Schleife.
$userlist[$user]->addPeriod($period);
Einige änderungen vorgenommen, die aus vergangenen info gegeben, in den vergangenen threads und dies ist die neue version des Codes. Es ist auch eine Warnung, aber ich denke, dass könnte gelöst werden, wenn der Fehler behoben ist:
Rufen Sie an eine member-Funktion addPeriod() on a non-object
$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($pno)
{
$this->periods[] = new Period($pno);
}
}
class Period {
public $periodNo;
public $subPeriods = array();
public function __construct($number)
{
$this->periodNo = $number;
}
public function addSubPeriod($spno)
{
$this->subPeriods[] = new SubPeriod($spno);
}
}
class SubPeriod {
public $SubPeriodNo;
public $answers = array();
public function __construct($number)
{
$this->SubPeriodNo = $number;
}
public function addAnswer($answer)
{
$this->answers[] = new Question($answer);
}
}
class Question {
public $answer;
public function __construct($ans)
{
$this->answer = $ans;
}
public function getAnswer()
{
echo $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))
{
$userlist[] = new User($row['user_ref']);
}
foreach ($userlist as &$user)
{
foreach ($periods_arr as &$period)
{
$userlist[$user]->addPeriod($period);
foreach ($subPeriods_arr as &$subPeriod)
{
$userlist[$user]->periods[$period]->addSubPeriod($subPeriod);
foreach($questionslist as &$aquestion)
{
$sql = 'SELECT ' . $aquestion . ' FROM _survey_1_as WHERE user_ref = ' .
$user . ' AND answer_sub_period = ' . $subPeriod . ' AND answer_period = ' . $period .'';
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
$userlist[$user]->periods[$period]->subPeriods[$subPeriod]->addAnswer($row[$questionNumber]);
}
}
}
}
}
$userlist[3]->periods[3]->subPeriods[1]->getAnswer();
- Sie können dieses Problem haben: bugs.php.net/bug.php?id=29992 Es ist am besten zum entfernen von verweisen und die Nutzung
foreach ($periods_arr as $period_key => $period)
- bedeutet das hinzufügen einer weiteren dimension zu meinem arrays(aller)?
- Ich zählte 5 geschachtelte Schleife!Sollten Sie umgestalten dieser code-block
- yeh prob in Aussehen sollte, dass ich Ihre erste :p
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bist du mit
$user
wie ein Schlüssel in Ihren$userlist
array ist, aber Sie Holen es als einen Wert. Probieren Sie etwas wie dieses:Diese macht
$user
den Schlüssel in Ihre$userlist
array.Wäre es sogar noch deutlicher, so etwas zu tun:
- Und dann nicht verwenden
$user
als key in dem array, sondern nur mit$user
als Wert. Zum Beispiel:$user->periods[$period]->addSubPeriod($subPeriod);
und jetzt immer undefined offset$periods_arr
. Nur gelten die Erkenntnisse aus der oben genannten Antwort auf die anderen loops, die Sie verwenden.if (isset($user->periods[$period])) { $user->periods[$period]->addSubPeriod($subPeriod); }
scheint zu funktionieren ein bisschen besser, jetzt immer ein Fehler in der sql-Abfrage, die sagen $Benutzer kann nicht in eine Zeichenfolge konvertiert werden, die ich dachte, ist ein string? aber egal das ist ein anderes problem. Sollte ich die stoppen die Schleife und fahren Sie auf die nächste $user, wenn Ihr nicht eingestellt?isset
Lösung, weil Sieforeach
ing über Ihre$periods_arr
array, aber man versucht, die Werte als Schlüssel in der$user->periods
arrays. Sie können nicht garantiert werden, dass diese arrays entsprechen, oder Sie fehlen nicht einige Werte in Ihrer Differenz.