Crea array annidato per i dati

Sep 26 2020

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

1 MarcinOrlowski Sep 26 2020 at 11:10

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;