Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217

    "Notice: Undefined index" con array multidimensionale

    Ho un array multidimensionale a 4-5 livelli, molti di questi sono numerosi (200 key per alcuni livelli). Parte di questi livelli viene creata dinamicamente dallo script e credo sia impossibile "dichiararla" prima di partire.
    Credo che l'errore che ricevo sia dovuto a questo: in un punto dello script, tramite ciclo "for", sommo ad una serie numerosa di valori, un nuovo valore al precedente. Al primo giro, però, quel valore non è dichiarato (percui viene assunto pari a 0, ma compare l'errore).

    Ecco le due linee che fanno comparire il notice:
    $impianti[$imp]["tot"][$data_row]["pac"] += $data_line[$impianti[$imp]['wr_column'][$inv-1]];
    $impianti[$imp]["tot"][$data_row]["daysum"] += $data_line[$impianti[$imp]['wr_column'][$inv-1]+1];
    Come posso ovviare?
    Ultima modifica di Tom1884; 29-05-2014 a 16:28

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Pensa se alla creazione dell'array puoi creare anche l'indice inizializzandolo a 0.
    Su un indice inesistente puoi fare un'assegnazione semplice che lo inizializza, ma non puoi farci un += finché non esiste, perché

    $array['pippo'] += $var;

    vuol dire

    $array['pippo'] = $array['pippo'] + $var;

    Il problema lo da $array['pippo'] al secondo membro.
    Ultima modifica di Alhazred; 29-05-2014 a 21:06

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    217
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Pensa se alla creazione dell'array puoi creare anche l'indice inizializzandolo a 0.
    Su un indice inesistente puoi fare un'assegnazione semplice che lo inizializza, ma non puoi farci un += finché non esiste, perché

    $array['pippo'] += $var;

    vuol dire

    $array['pippo'] = $array['pippo'] + $var;

    Il problema lo da $array['pippo'] al secondo membro.
    Hai centrato la situazione. Ho risolto con questa condizione, in un punto del ciclo:
    if (!isset($impianti[$imp]["tot"][$data_row]["daysum"])) {
    $impianti[$imp]["tot"][$data_row]["daysum"] = 0;
    }

    Tuttavia mi chiedo ancora che senso abbia questo "warning"... tanto più se poi lo script viene comunque correttamente eseguito...

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Il problema è probabilmente che ti avvisa del fatto che non avendo tu inizializzato tale indice lo farà PHP, ma potrebbe inizializzarlo con un valore diverso da quello che vorresti tu.
    L'inizializzazione verrà fatta con la stringa vuota, che verrà anche interpretata come 0 se ci fai operazioni matematiche, quindi nel 99.99% dei casi va bene, ma se devi fare qualcosa di diverso, PHP ti avverte.

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.