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

    Come risolvere Notice: Undefined offset

    Ciao a tutti, come scritto sul titolo non riesco a risolvere questo problema. Lo script funziona ma stampa anche la Notice.

    vi posto il codice

    codice:
    $ris = [
          ['cat_veicolo' => '1'],
          ['cat_veicolo' => '1'],
          ['cat_veicolo' => '1'],
          ['cat_veicolo' => '1'],
          ['cat_veicolo' => '1'],
          ['cat_veicolo' => '2'],
          ['cat_veicolo' => '2'],
          ['cat_veicolo' => '2'],
          ['cat_veicolo' => '2'],
          ['cat_veicolo' => '2']
        ];
        if(!empty($ris)){
          $cont = count($ris,0);
          $flag = 0;
          $j=0;
          $x=0;
          for ($i = 0; $i < $cont; $i++) {
    
    
            if ($ris[$i]['cat_veicolo'] != $flag ) {
    
    
              $flag = $ris[$i]['cat_veicolo'];
              echo "<p style='color:red'> HEADER </p>";
              for($j=0; $j < $cont; $j++) {
                if ($flag == $ris[$x]['cat_veicolo']) {
                  echo "<p style='color:green'>  - BODY </p>";
                  $x++;
                }
    
    
              }
              echo "<p style='color:blue'> FOOTER </p>";
              $j = 0;
            }else {
              //$j=0;
              echo "Indice I -> $i <br>";
                echo "--Indice j -> $j <br>";
                  echo "----Indice x -> $x <br>";
            }
          } //chiudo for
    
    
        } //chiudo if principale

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sfori con l'indice $x qui

    if ($flag == $ris[$x]['cat_veicolo'])

    $x va oltre il numero di elementi dell'array.

  3. #3
    ok, però sapendo che sono 10 array nell'array padre e nel if oltre il controllo $flag == $ris[$x]['cat_veicolo'] aggiungo un AND $x < $count($ris) l'errore si presenta ugualmente. Come posso evitare ciò?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Non so quale sia di preciso la logica e lo scopo di ciò che ti serve.
    Hai 2 cicli annidati sullo stesso array, $i e $j ti vanno giusti perché il for ha l'inizializzazione a 0 di tali variabili, $x invece aumenta sempre, è questo che ti serve realmente?
    Mettere $x = 0; dentro il primo for sarebbe sbagliato per la tua logica di funzionamento?

    P.S. quel $j = 0; prima del primo for non ha ragione di esserci, tanto viene inizializzato nel secondo for, dove effettivamente viene usato.

  5. #5
    in breve: ricevo un array multidimensionale dall'esecuzione di una query che io ho ricreato nell'esempio. lo script deve verificare che l'array non è vuoto ed entrare nel primo ciclo per estrapolare i dati. Per fare ciò ho inserito una variabile flag settata a 0 prima di entrare nel ciclo e subito dopo eseguo un if -> se $ris[$x]['cat_veicolo'] che di fatto è un'id è diverso da flag entra nel if inserisco la id nella variabile flag e stampo una porzione di codice, in questo caso una sezione del sito, dopo di che arrivo al secondo ciclo che dovrebbe stampare tutti i dati contenuti negli array interni con lo stesso numero id contenuto in flag. Alla fine del ciclo esco stampando la parte finale del codice per chiudere la sezione. Come se fosse una tabella, nella prima parte stampo l'intestazione, nel secondo ciclo stampo il corpo e uscendo stampo il footer. ripentendo il primo ciclo, se if trova una chiave diversa con $ris[$i]['cat_veicolo'] != $flag allora stampa una nuova sezione e ripete il procedimento altrimenti esce e incrementa l'indice $i fine ad arrivare alla fine.

    Se metto $x = 0 all'interno del primo ciclo, stampa bene la prima sezione ma trovando una seconda chiave id stampa "lo scheletro ma non stampa il corpo (tramite if del secondo ciclo).

    A parole forse è un po' contorto, spero sia riuscito a spiegarmi.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    192
    Codice PHP:
    $array_ordinamento_come_scritto = array(0,1,2); //offset implicito e inizia da 0
    foreach($array_ordinamento_come_scritto as $key => $value) {
    //Controllo che non è su più livelli
    if(!is_array($value) && isset($array_ordinamento_come_scritto[$key])) {
    echo 
    'esiste offset' $key;
    }

    Penso che stai superando il massimo degli elementi, se count "il totale di tutti gli elementi" da 3 (se inizia da 0 significa 3-1=2 $key, invece stai anche controllando $array[3] che non è definito)
    Ultima modifica di darbula; 09-02-2022 a 15:39

  7. #7
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Non so quale sia di preciso la logica e lo scopo di ciò che ti serve.
    Hai 2 cicli annidati sullo stesso array, $i e $j ti vanno giusti perché il for ha l'inizializzazione a 0 di tali variabili, $x invece aumenta sempre, è questo che ti serve realmente?
    Mettere $x = 0; dentro il primo for sarebbe sbagliato per la tua logica di funzionamento?

    P.S. quel $j = 0; prima del primo for non ha ragione di esserci, tanto viene inizializzato nel secondo for, dove effettivamente viene usato.

    la soluzione era più stupida di quanto pensassi.. Alhazred mi ha fatto riflettere. Ho eliminato l'indice x e sostituito con j indice del secondo for. A volte ci fossilizziamo su ragionamenti e non vediamo la semplicità delle cose.

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.