Erstellen Sie ein verschachteltes Array für Daten
Ich führe eine SQL-Abfrage aus, um die Daten abzurufen, und füge sie dann einem Array hinzu. Ich versuche, die Daten in verschachtelten Array zu erreichen. Da die Schultabelle mehrere Daten für die Benutzertabelle zurückgibt.
Hier ist der Code.
$res=array(); $data = $mysqli->prepare("SELECT name, rollno, pic from `users` as a and a.uid = ?"); $data ->bind_param("i", $uid); $data->execute();
$data->store_result(); $data->bind_result($name, $rollno, $pic); if($data->num_rows != 0){
while ($data->fetch()){ $name = $name; $rollno = $rollno; $pic = $pic; $res['content'][] = array(
"name" => $name, "rollno" => $rollno,
"pic" => $pic ); $sdata = $mysqli->prepare("SELECT a.uid, a.class, a.subject, a.board from `school` as a and a.uid = ?"); $sdata ->bind_param("i", $uid); $sdata->execute();
$sdata->store_result(); $sdata->bind_result( $uid, $class, $subject, $board);
if($sdata->num_rows != 0){ while ($sdata->fetch()){
$uid = $uid;
$class = $class;
$subject = $subject;
$board = $board;
$res['content']['pricing'][] = array( "uid" => $uid,
"class" => $class, "subject" => $subject,
"board" => $board
);
}
}
}
}
Die obige Methode gibt mir eine Ausgabe wie diese.
Array
(
[content] => Array
(
[0] => Array
(
[name] => Test User1
[rollno] => 9
[pic] => 9_1599452969.jpg
)
[1] => Array
(
[name] => Test User2
[rollno] => 8
[pic] => 8_1599452969.jpg
)
[pricing] => Array
(
[0] => Array
(
[uid] => 8
[class] => 2
[subject] => Math
[board] => CBSE
)
[1] => Array
(
[uid] => 8
[class] => 2
[subject] => Science
[board] => CBSE
)
[2] => Array
(
[uid] => 9
[class] => 2
[subject] => Science
[board] => CBSE
)
[3] => Array
(
[uid] =>9
[class] => 2
[subject] => English
[board] => CBSE
)
[4] => Array
(
[uid] => 9
[class] => 2
[subject] => Math
[board] => CBSE
)
)
)
)
Wie Sie sehen können, kommen Preisarraydaten nach Inhaltsdaten. Ich möchte, dass es auf verschachtelte Weise in derselben Zeile steht.
Array
(
[content] => Array
(
[0] => Array
(
[name] => Test User1
[rollno] => 9
[pic] => 9_1599452969.jpg
[Pricing][0] => Array
(
[uid] => 9
[class] => 2
[subject] => Science
[board] => CBSE
)
[1] => Array
(
[uid] =>9
[class] => 2
[subject] => English
[board] => CBSE
)
[2] => Array
(
[uid] => 9
[class] => 2
[subject] => Math
[board] => CBSE
)
)
[1] => Array
(
[name] => Test User2
[rollno] => 8
[pic] => 8_1599452969.jpg
[pricing][0] => Array
(
[uid] => 8
[class] => 2
[subject] => Math
[board] => CBSE
)
[1] => Array
(
[uid] => 8
[class] => 2
[subject] => Science
[board] => CBSE
)
)
[pricing] => Array
(
)
)
)
Antworten
Der einfachste Ansatz wäre, ein temporäres Array zu erstellen, es mit allen Daten zu versorgen und dann zu ergänzen $res. Also statt
$res['content'][] = array(
"name" => $name, "rollno" => $rollno,
"pic" => $pic
);
tun
$tmp = array(
"name" => $name, "rollno" => $rollno,
"pic" => $pic
);
Fügen Sie dann die Preise hinzu - anstelle von
$res['content']['pricing'][] = array(
"uid" => $uid, "class" => $class,
"subject" => $subject, "board" => $board
);
zum temporären Array hinzufügen
$tmp['pricing'][] = array( "uid" => $uid,
"class" => $class, "subject" => $subject,
"board" => $board
);
Und schließlich, bevor Sie eine weitere Iteration der Hauptschleife durchführen, fügen Sie sie hinzu $res
$res['content'][] = $tmp;