Crea array annidato per i dati
Sto eseguendo una query SQL per ottenere i dati e quindi li sto aggiungendo in un array. Sto cercando di ottenere i dati nella matrice annidata. Poiché la tabella della scuola restituisce più dati per la tabella degli utenti.
Ecco il codice.
$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
);
}
}
}
}
Il metodo sopra mi sta dando un output come questo.
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
)
)
)
)
Come puoi vedere, i dati della matrice dei prezzi arrivano dopo i dati sui contenuti. Voglio che sia sulla stessa linea in modo nidificato.
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
(
)
)
)
Risposte
L'approccio più semplice sarebbe creare un array temporaneo, alimentarlo con tutti i dati e quindi aggiungerlo a $res. Quindi invece di
$res['content'][] = array(
"name" => $name, "rollno" => $rollno,
"pic" => $pic
);
fare
$tmp = array(
"name" => $name, "rollno" => $rollno,
"pic" => $pic
);
Quindi aggiungi il prezzo - invece di
$res['content']['pricing'][] = array(
"uid" => $uid, "class" => $class,
"subject" => $subject, "board" => $board
);
aggiungere all'array temporaneo
$tmp['pricing'][] = array( "uid" => $uid,
"class" => $class, "subject" => $subject,
"board" => $board
);
E infine, prima di eseguire un'altra iterazione del ciclo principale, aggiungilo a $res
$res['content'][] = $tmp;