Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    ottenere array multidimensionale PHP ordinato e completo

    Buongiorno ho un problema con un array multidimensionale a cui devo smontarlo e rimontarlo come segue:
    codice:
    ARRAY INIZIALE:
    
    
    [{"id1":"6419"},{"id2":"1889"},{"id3":"6551"},{"id4":"6189"},{"id5":"6182"},{"id6":"4982"},{"id7":"5947"},{"id8":"3028"},{"id9":"704"},{"id10":"2422"},{"id11":"5844"},{"id12":"4377"},{"id13":"481"},{"id14":"4754"},{"id15":"6663"},{"id16":"5834"},{"id17":"3716"},{"id18":"6919"},{"id19":"3198"},{"id20":"1900"},{"id21":"5242"},{"id22":"2998"},{"id23":"3760"},{"id24":"2108"},{"id25":"3055"},{"id26":"2913"},{"id27":"618"},{"id28":"315"},{"id29":"1341"},{"id30":"4336"},{"id31":"1000"},{"id32":"918"},{"id33":"2897"},{"id34":"5223"},{"id35":"6181"},{"id36":"4749"},{"id37":"4095"},{"id38":"5234"},{"id39":"1504"},{"id40":"1749"}]
    da questo array devo ottenere 8 array diversi simili con id da 1 a 40 in cui ho alcuni id con risposta errata (da 5 a 10) e gli altri tutti giusti, riesco ad ottenere dal codice l' array con tutti gli ID errati ma da lì non riesco a dirgli come tutti gli altri diversi da quelli devono essere corretti:

    codice:
    /*//////////////////////////id SBAGLIATI/////////////////////*/
     for($i=0;$i<$allievi_no;$i++){
                    $quiz_errati[$a]=array();
                    $array_sbagliati[$a]=array();
                    echo(json_encode($array_allievi[$i])."\n\r");
    
    
                    $errori1=rand(5,10);
                   // echo("num errori: ".$errori1."\n\r");
                    for($j=0;$j<$errori1;$j++){
                        $id_errati=rand(1,39);                 
                       // echo("id_errati: ".$id_errati."\n\r");
                        array_push($array_sbagliati[$a],$id_errati);
    
    
                    }
           
                   // echo(json_encode($array_sbagliati[$a])."\n\r");
                    $a++;   
                }
    
    /*//////////////////////////////////////////////////////////////////*/
    
    /*////////////////////////ARRAY CON id e risposta sbagliata*/
      while($h<$a){
                    $arr_giuste=array();
                    $arr_errate=array();
                    $arr[$h] = array();
                    $arr_giuste[$h]=array();
                    foreach($array_sbagliati[$h] as $key=>$value){
                        //echo($key."=>".$value)."\n\r";
                        $arr[$h][$key] = $value;
                    }
                    array_multisort($arr[$h], SORT_ASC, $array_sbagliati[$h]);
    
    
                    for($a=0;$a<sizeof($arr[$h]);$a++){
                        for($r=0;$r<sizeof($array_schede);$r++){
                           // echo($arr[$h][$a])."\n\r";     
                                            
                            if($arr[$h][$a]==$r){
                                // echo ($r."\n\r");
                                $listaQuizId_no[$h]=array(                            
                                    "id".($r+1) =>$array_schede[$r]["id".($r+1)],
                                    "rispostaok"=> 0
                                );
                                //echo($q)."\n\r";
                                array_push($quiz_errati[$h], $listaQuizId_no[$h]);  
                            }                      
                        
                        }   
    
    
                    }
    
    
    
    //////////////////////////////////////////////////////////////////
    ottengo tutti gli array con solo le risposte errate per ogni array che mi serve:
    codice:
    [{"id15":"6663","rispostaok":0},{"id19":"3198","rispostaok":0},{"id21":"5242","rispostaok":0},{"id23":"3760","rispostaok":0},{"id24":"2108","rispostaok":0},{"id24":"2108","rispostaok":0},{"id30":"4336","rispostaok":0},{"id34":"5223","rispostaok":0},{"id38":"5234","rispostaok":0}]
    
    
    [{"id3":"6551","rispostaok":0},{"id8":"3028","rispostaok":0},{"id13":"481","rispostaok":0},{"id28":"315","rispostaok":0},{"id29":"1341","rispostaok":0},{"id32":"918","rispostaok":0},{"id33":"2897","rispostaok":0},{"id39":"1504","rispostaok":0}]
    
    
    [{"id11":"5844","rispostaok":0},{"id18":"6919","rispostaok":0},{"id19":"3198","rispostaok":0},{"id36":"4749","rispostaok":0},{"id38":"5234","rispostaok":0},{"id40":"1749","rispostaok":0}]
    
    
    [{"id7":"5947","rispostaok":0},{"id9":"704","rispostaok":0},{"id11":"5844","rispostaok":0},{"id20":"1900","rispostaok":0},{"id21":"5242","rispostaok":0},{"id23":"3760","rispostaok":0},{"id25":"3055","rispostaok":0},{"id38":"5234","rispostaok":0}]
    
    
    [{"id3":"6551","rispostaok":0},{"id6":"4982","rispostaok":0},{"id12":"4377","rispostaok":0},{"id16":"5834","rispostaok":0},{"id20":"1900","rispostaok":0},{"id22":"2998","rispostaok":0},{"id23":"3760","rispostaok":0},{"id24":"2108","rispostaok":0},{"id35":"6181","rispostaok":0},{"id37":"4095","rispostaok":0}]
    
    
    [{"id11":"5844","rispostaok":0},{"id15":"6663","rispostaok":0},{"id17":"3716","rispostaok":0},{"id22":"2998","rispostaok":0},{"id31":"1000","rispostaok":0},{"id32":"918","rispostaok":0}]
    come faccio a dirgli che le altre sono giuste quindi con
    es.
    id1=> 4321
    rispostaok=>1

    In cui ovviamente devo poi mettere tutti gli array da id1 a id40 con ripsote 0 o 1 a seconda di come ho ottenuto...
    idee?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Sei consapevole che è un array php con n elementi di json? Sei anche consapevole che rand tra 1 e 39 per tutti gli n elementi darà sempre errato per n elementi che abbiano chiave tra 1 e 39?
    Comunque per forzare la conversione da json a array
    codice:
    $multi = json_decode($array_php, true);
    var_dump($multi[0][key($multi[0])]); // value id
    Se veramente vuoi creare un random (da 0 a 39), giustamente se è scelto un numero non dovrà più ripetersi, è meglio gestire un array.
    codice:
    $input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
    $rand_keys = array_rand($input, 2);
    echo $input[$rand_keys[0]] . "\n";
    echo $input[$rand_keys[1]] . "\n";
    unset($input[$rand_keys[0]]);
    $input = array_values($input);
    Questo esempio inizia da chiave 0 e finisce a chiave 4, tolgo la n chiave dal mio array originale e ordino da chiave 0.
    Ultima modifica di darbula; 10-08-2021 a 15:40

  3. #3
    Non so se hai capito di cosa avevo bisogno, lavorandoci so che non è bello ma ho ottenuto questo:


    codice:
     /*////////ALLIEVI CON PIU' DI 5 ERRORI//////// */
                for($i=0;$i<$allievi_no;$i++){
                    $quiz_errati[$a]=array();
                    $array_sbagliati[$a]=array();
                  //  echo(json_encode($array_allievi[$i])."\n\r");
    
    
                    $errori1=rand(5,10);
                   // echo("num errori: ".$errori1."\n\r");
                    for($j=0;$j<$errori1;$j++){
                        $id_errati=rand(1,39); 
                        if(in_array($id_errati,$array_sbagliati[$a])){
                            $id_errati=rand(1,39);
                            if(in_array($id_errati,$array_sbagliati[$a])){
                                $id_errati=rand(1,39);
                                if(in_array($id_errati,$array_sbagliati[$a])){
                                    $id_errati=rand(1,39);
                                    if(in_array($id_errati,$array_sbagliati[$a])){
                                        $id_errati=rand(1,39);
                                        if(in_array($id_errati,$array_sbagliati[$a])){
                                            $id_errati=rand(1,39);
                                            if(in_array($id_errati,$array_sbagliati[$a])){
                                                $id_errati=rand(1,39);
                                                if(in_array($id_errati,$array_sbagliati[$a])){
                                                    $id_errati=rand(1,39);
                                                    if(in_array($id_errati,$array_sbagliati[$a])){
                                                        $id_errati=rand(1,39);
                                                        if(in_array($id_errati,$array_sbagliati[$a])){
                                                            $id_errati=rand(1,39);
                                                        } 
                                                    } 
                                                } 
                                            } 
                                        } 
                                    } 
                                } 
                            } 
                            
                        }          
                     
                        array_push($array_sbagliati[$a],$id_errati);
    
    
                    }
           
                
                    $a++;   
                }
    
    
          
                $n=0;
               
               $listaQuizId_no=array();
               $h=0;
               $s=1;
              
                
                $semaforo=false;
    
    
              
    
    
                while($h<$a){
                    $arr_giuste=array();
                    $arr_errate=array();
                    $arr[$h] = array();
                    $arr_giuste[$h]=array();
                    foreach($array_sbagliati[$h] as $key=>$value){
                        //echo($key."=>".$value)."\n\r";
                        $arr[$h][$key] = $value;
                    }
                    array_multisort($arr[$h], SORT_ASC, $array_sbagliati[$h]);
                    
                  //  echo json_encode($arr[$h])."\n\r";
    
    
                    for($q=0;$q<sizeof($arr[$h]);$q++){
    
    
                        while(sizeof($quiz_errati[$h])<sizeof($array_schede)){
                 
                            if($arr[$h][$q]==$s){
    
    
                                $listaQuizId_no[$h]=array(                            
                                    "id".($s) =>$array_schede[$s-1]["id".($s)],
                                    "rispostaok"=> 0
                                );
                               
                              
                                array_push($quiz_errati[$h], $listaQuizId_no[$h]);  
    
    
    
    
                                $s++;
                                if($q<sizeof($arr[$h])-1){
                                    $q++;
                                }
                                
                            }else{
                                $listaQuizId_no[$h]=array(                            
                                    "id".($s) =>$array_schede[($s-1)]["id".($s)],
                                    "rispostaok"=> 1
                                );                           
                              
                                array_push($quiz_errati[$h], $listaQuizId_no[$h]);  
    
    
    
    
                                $s++;
                            }   
    
    
                        }
                        $s=1;
                    }
    
    
                    $agg_corretta=array(
                        "id_allievo"=>$array_allievi[$h]["id_allievo"],
                        "tempo_scheda"=>$tempo,
                        "arr_idmaster_rispostaok"=>$quiz_errati[$h]
                    );
                    
                    array_push($result["risultati"], $agg_corretta);
                   // echo(json_encode($quiz_errati[$h])."\n\r");
    
    
                    
    
    
                    $h++;
                }
    
    
                
                ///////////////////////////////////////////////////////////////////////////////////////////////////////
                /*///////////////////////////////////////ALLIEVI CON MENO DI 5 ERRORI/////////////////////////////// */
                //////////////////////////////////////////////////////////////////////////////////////////////////////
                
                $d=0;
                $cont=0;
                for($i=0;$i<$allievi_ok;$i++){
                    $quiz_errati2[$d]=array();              
                    $array_sbagliati2[$d]=array();
                   // echo(json_encode($array_allievi[$i])."\n\r");
    
    
                    $errori2=rand(0,4);
                    
                                           
    
    
                    if($errori2!=0){
                        for($j=0;$j<=$errori2;$j++){
                            $id_errati=rand(1,39); 
                            if(in_array($id_errati,$array_sbagliati2[$d])){
                                $id_errati=rand(1,39);
                                if(in_array($id_errati,$array_sbagliati2[$d])){
                                    $id_errati=rand(1,39);
                                    if(in_array($id_errati,$array_sbagliati2[$d])){
                                        $id_errati=rand(1,39);
                                        if(in_array($id_errati,$array_sbagliati2[$d])){
                                            $id_errati=rand(1,39);
                                            if(in_array($id_errati,$array_sbagliati2[$d])){
                                                $id_errati=rand(1,39);
                                                if(in_array($id_errati,$array_sbagliati2[$d])){
                                                    $id_errati=rand(1,39);
                                                    if(in_array($id_errati,$array_sbagliati2[$d])){
                                                        $id_errati=rand(1,39);
                                                        if(in_array($id_errati,$array_sbagliati2[$d])){
                                                            $id_errati=rand(1,39);
                                                            if(in_array($id_errati,$array_sbagliati2[$d])){
                                                                $id_errati=rand(1,39);
                                                            } 
                                                        } 
                                                    } 
                                                } 
                                            } 
                                        } 
                                    } 
                                } 
                                
                            }  
                            array_push($array_sbagliati2[$d],$id_errati);
                        }
    
    
                    }
                    
    
    
                    
                    $d++;
    
    
                }
    
    
    
    
               
                $n=0;
               
                $listaQuizId_no2=array();
                $x=0;
                $s=1;
                $l=1;
                $m=0;
                $quiz_errati2=array();
                while($x<$d){
                    if($array_sbagliati2[$x]!=[]){
    
    
                        $arr_giuste=array();
                        $arr_errate=array();
                        $arr[$x] = array();
                        $arr_giuste[$x]=array();
                        $quiz_errati2[$x]=array();
    
    
                        foreach($array_sbagliati2[$x] as $key=>$value){
                            //echo($key."=>".$value)."\n\r";
                            $arr[$x][$key] = $value;
                        }
                        array_multisort($arr[$x], SORT_ASC, $array_sbagliati2[$x]);
    
    
                       
    
    
                        for($m=0;$m<sizeof($arr[$x]);$m++){
                            while(sizeof($quiz_errati2[$x])<sizeof($array_schede)){
                                if($arr[$x][$m]==$s){
                                    $listaQuizId_no2[$x]=array(                            
                                        "id".($s) =>$array_schede[$s-1]["id".($s)],
                                        "rispostaok"=> 0
                                    );                               
                                  
                                    array_push($quiz_errati2[$x], $listaQuizId_no2[$x]);  
        
                                    $s++;
                                    if($m<sizeof($arr[$x])-1){
                                        $m++;
                                    }  
                                }else{
                                    $listaQuizId_no2[$x]=array(                            
                                        "id".($s) =>$array_schede[($s-1)]["id".($s)],
                                        "rispostaok"=> 1
                                    );                           
                                  
                                    array_push($quiz_errati2[$x], $listaQuizId_no2[$x]);  
        
        
                                    $s++;
                                }
                            }
                            $s=1;
                        }
                        
                        $agg_corretta=array(
                            "id_allievo"=>$array_allievi[$x]["id_allievo"],
                            "tempo_scheda"=>$tempo,
                            "arr_idmaster_rispostaok"=>$quiz_errati2[$x]
                        );
                        
                        array_push($result["risultati"], $agg_corretta);
    
    
                       //echo(json_encode($quiz_errati2[$x])."\n\r");
                        
                    }else{
                        $quiz_OK=array(); 
                        $quiz_errati2[$x]=array();   
                      //  echo("VUOTO: ". json_encode($array_sbagliati2[$x])."\n\r");
    
    
                        while($s<=sizeof($array_schede)){
                            $listaQuizId_no2[$x]=array(                            
                                "id".($s) =>$array_schede[$s-1]["id".($s)],
                                "rispostaok"=> 0
                            );                               
                          
                            array_push($quiz_errati2[$x], $listaQuizId_no2[$x]);  
    
    
                            $s++;
                        }
                        $s=1;
    
    
                        $agg_corretta=array(
                            "id_allievo"=>$array_allievi[$x]["id_allievo"],
                            "tempo_scheda"=>$tempo,
                            "arr_idmaster_rispostaok"=>$quiz_errati2[$x]
                        );
                        
                        array_push($result["risultati"], $agg_corretta);
    
    
                        
                    }
    
    
                    $x++;
                }
    
    
                $risultati_finale=array(
                    "file_listato"=> "NQM2016.1.XML",
                    "num_quesiti" => "40",
                    "soglia_errori"=> "4",
                    "risultati"=>$result["risultati"]
                );
    
    
                // echo json_encode($result["risultati"]); 
                echo json_encode($risultati_finale);
    
    
                file_put_contents("risultati_finale.json",json_encode($risultati_finale));
    Non è bello ma fa quello di cui avevo bisogno.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    191
    Non è il punto che io capisca ma che tu ti renda conto cosa significa l'origine di dati (senza cicli, ma semplicemente il primo valore grezzo e il susseguirsi).. Se non capisci, farai fatica.
    Comunque ho compreso la tua richiesta, ti ho solo spiegato come trasformare in array php un array di oggetto json.
    Se fai var_dump ti sarà tutto chiaro, l'output ti dirà come proseguire in base la struttura, poi del resto solo tu conosci come abbinare un id a una risposta corretta o sbagliata (non ci vedo nulla di così difficile).
    Anche se il codice creato ti da il risultato atteso, sappi che per me è spazzatura (perché sei privo del concetto di origine dei dati).
    Se mi indichi random, di conseguenza è normale che ti risponda io random, discorso diverso se id1 6419 da risposta corretta. (Lì magari esiste una logica).
    Pensi siamo sbagliati in due? https://forum.html.it/forum/showthre...1#post25564131 (la domanda che dovrai porti è concediti il beneficio del dubbio).
    Ultima modifica di darbula; 10-08-2021 a 18:43

  5. #5
    No ma guarda che la parte di elaborazione dati da json la facevo in un pezzo prima che non ho postato
    codice:
               $schedaQA = file_get_contents("schedaQA.json");
                $json_a = json_decode($schedaQA, true);
                $array_schede=array();
    
    
    
    
    
    
                
                //echo json_encode($array_schede[39]);
                $risposta=1;
            
              
                foreach($json_a as $scheda){
                    for($i=0;$i<sizeof($scheda["id_master"]);$i++){
                        //echo json_encode($scheda["id_master"][$i]);
                        array_push($array_schede,$scheda["id_master"][$i]);
                    }
                }
    Se poi questo non è il metodo corretto non lo so e mi fa piacere sapere come avrei dovuto fare canonicamente.
    I dati che ho messo sono solo la rappresentazione visiva che ho preso dalla risposta di Postman che sto usando in quanto il pezzo che ho postato fa parte di una parte di webapp con un servizio rest.
    Detto ciò comunque ti ringrazio e so bene che il mio studio di Php è ancora all' inizio e va approfondito.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.