Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    590

    problema con array_key_exists

    sto sbattendo la testa da tempo su questo problema, tento di semplificare al massimo:
    in allegato la struttura della tabella.
    lo script deve restituire un array associativo di "nodi" chiamato 'mNode' con una chiave per ogni anno_pronuncia (se il nodo "2005" è già inserito, appendo allo stesso nodo i contenuti della riga letta).
    Quindi $NodeId dovrebbe incrementarsi solo quando creo il nodo 'anno', non quando appendo dati al nodo già creato. Il problema è che $NodeId invece si incrementa anche quando array_key_exists() trova il nodo 'anno' e appendo contenuti (solo la prima volta).
    Nell'esempio in allegato, $NodeId deve essere 0 per tutte le iterazioni dell'anno 2005, invece diventa 1 alla seconda iterazione id=1857 (poi rimane 1 alle successive)
    Codice PHP:
    $NodeId=0;
    while(
    $row=$res->fetch_assoc()){
            
    $iter=0;
            
    $anno=$row['anno_pronuncia'];
                    
                    
    $PronId='Pron'.$index++;
                    
    //se esiste nodo anno
                    
    if(array_key_exists($anno$cc['mNodes'])){
                    
                    
    $PronNum++;
                    
                    
    $cc['mNodes'][$anno]['numeroPronunce']++;                
                    
    $cc['mNodes'][$anno]['pronunce'][$PronNum]['Pid']=$row['id'];
                    
    $cc['mNodes'][$anno]['content'].='C.Cost '.$row['numero_pronuncia'].'/'.$row['anno_pronuncia'].'<br>'.utf8_encode($row['tipologia_giudizio']).'<br><button class="btn btn-primary" data-toggle="" data-target="" onclick="showPronunces(\'CC'.$NodeId.'\',\''.$PronNum.'\')">Full text <i class="fa fa-gavel"></i></button><br>';
                            
                    }
                    
    //se non esiste nodo anno
                    
    else {
                        
    $PronNum=1;
                        
                        
    $cc['mNodes'][$anno]['label']=$anno;
                        
    $cc['mNodes'][$anno]['id']='CC'.$NodeId;
                        
    $cc['mNodes'][$anno]['anno']=$anno;
                        
    $cc['mNodes'][$anno]['numeroPronunce']=1;
                        
                        
    $cc['mNodes'][$anno]['pronunce']=array();
                        
    $cc['mNodes'][$anno]['pronunce'][$PronNum]['Pid']=$row['id'];
                        
                        
    $cc['mNodes'][$anno]['manage']='<p class="title">Anno '.$anno.'</p>';
                        
    $cc['mNodes'][$anno]['content']='C.Cost '.$row['numero_pronuncia'].'/'.$row['anno_pronuncia'].'<br>'.utf8_encode($row['tipologia_giudizio']).'<br><button class="btn btn-primary" data-toggle="" data-target="" onclick="showPronunces(\'CC'.$NodeId.'\',\''.$PronNum.'\')">Full text <i class="fa fa-gavel"></i></button>';
                        
                        
    $NodeId++;
                    }
            } 
    Immagini allegate Immagini allegate
    Ultima modifica di jimbo0; 15-10-2014 a 17:56

  2. #2
    $cc inizialmente esiste o lo stai creando qui? Se cambia l'anno, NodeId aumenta ma non può diminuire.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    590
    certo che esiste, viene inizializzato $cc['mNodes']=array();

    $NodeId non deve diminuire, deve solo aumentare, ma deve aumentare SOLO quando "aggiungo" un nuovo nodo, ossia quando aggiungo un elemento a $cc['mNodes'] (con chiave $anno)

    ps: parlo di nodi, ovviamente intendo elementi di $cc['mNodes']

  4. #4
    Il tuo codice dice che se trova un nuovo $anno allora $NodeId aumenta, quindi in teoria, se inizialmente $cc['mNodes']=array(), allora il primo $anno che incontri lo fa per forza aumentare, poiché è vuoto e non c'è nessun $anno. Quindi non diventa 1 quando trovi id=1857, ma diventa una alla prima iterazione (infatti $NodeId++ è alla fine del blocco else, e per tutto il blocco else vale 0, ma dipende da 2005, non da 1857)

    Quindi:
    Trova 2005 -> $NodeId diventa 1
    Trova 1857 -> $NodeId diventa 2
    Trova 2005 -> c'era già quindi $NodeId rimane 2

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    590
    o cavolo hai ragione, in rapporto al tempo perso credo sia uno degli errori più idioti mai incontrati

    ho risolto inizializzando $nodeId a -1 e incrementandolo all'inizio dell'else. grazie

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 © 2026 vBulletin Solutions, Inc. All rights reserved.