Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420

    mancato settaggio @$variabile

    Ciao a tutti;
    ho un array di questo tipo:

    $magazzino = array($var1, $var2, $var, $varecc);

    Alcune di queste variabili al momento della dichiarazione dell'array, non sono ancora inizializzate e per evitare il messaggio d'errore, pensavo di poter risolvere usando l'operatore @

    L'array diventa quindi:

    $magazzino = array($var1, @$var2, $var, @$varecc);

    Successivamente però, per settare quelle variabili, utilizzo un ciclo for ed istruzioni del tipo

    $value[0] = 123;
    $value[1] = 456;
    ecc

    Le variabili indicizzate "$value" vengono poi utilizzate direttamente in alcune query...
    Il problema è che a quanto pare, tutte quelle dichiarate con la @ sembrano non prendere il successivo settaggio e nelle query risultano "";
    Siccome non mi era mai capitato di utilizzare quest'operatore non so se sto sbagliando approccio o se c'è qualche accorgimento a me ignoto da mettere in atto...
    In alternativa che strade potrei percorrere oltre ad inizializzare a 0 tutte le variabili prima della creazione dell'array?
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Scusa, ma non credo di aver afferrato

    $value[0] = 123;
    $value[1] = 456;

    Che cosa dovrebbero essere?

    Cmq, tu fai una cosa del genere:

    Codice PHP:
    $v12;
    $magazzino = array($v1, @$v2);
    $v2 5;
    print_r($magazino); 
    Ti aspetti che ti stampa array([0]=> 2, [1]=> 5) , giusto ?
    Chiaramente così non funziona, perchè l'array è costruito per copia.
    Prova a fare

    $magazzino = array($v1, &$v2);

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    uhm...uhm...
    l'array lo scansiono tramite un ciclo foreach in cui ogni campo diventa un $value[];
    comunque si.. il ragionamento è più o meno quello che hai scritto... ma sono molto confuso adesso...
    Che vuol dire costruito per copia? E a cosa serve l'operatore & ? Mi ricorda tanto i puntatori del c...
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Guarda, se posti il codice è meglio. perchè credo di non aver capito il tuo problema...

    Cmq, secondo assegni i valori a delle copie delle variabili

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Originariamente inviato da boots
    Guarda, se posti il codice è meglio. perchè credo di non aver capito il tuo problema...

    Cmq, secondo assegni i valori a delle copie delle variabili
    Si forse è meglio :-D

    L'array per esteso ha questa forma:

    Codice PHP:
    $armadio = array(
       array(
    'maglia'$maglia1, @$maglia2$maglia3$magliaecc),
       array(
    'camicia'$camicia1, @$camicia2$camicia3$camiciaecc),
       array(
    'giacca'$giacca1, @$giacca2$giacca3$giaccaecc)
    ); 
    $maglia2, $camicia2 e $giacca2 non sono ancora inizializzate, quindi inserisco l'operatore @ per evitare il messaggio d'errore;
    proseguendo col codice:

    Codice PHP:
    foreach ($armadio as $value) {
         
    $value[1] = 100;
         
    $value[2] = 100;
         
    $value[3] = 100;

    se ora controllo il contenuto delle variabili, tutti i prodotti con indice 1 e 3 valgono correttamente 100, i prodotti con indice 2 risultano vuoti... l'assegnazione interna al foreach non è avvenuta...
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Come sospettavo...

    Codice PHP:
    foreach ($armadio as $value) { 
    $value è una COPIA del elemento di $armadio, quindi non modifichi $armadio.

    Cambia così:

    Codice PHP:
    foreach ($armadio as &$value) { 
    con &, indichi il riferiemento all'elemento di $armadio

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    Uhm...uhm...
    Come dicevo, sono confuso...
    inizialmente il mio codice prevedeva, prima della creazione dell'array, l'inizializzazione a 0 di tutte le variabili; per evitare quel papello ho introdotto l'elemento @...
    Perchè prima funzionava e adesso no? Il resto del codice è identico...
    Inoltre, anche accettando l'idea che quella che vado a modificare è una copia e non l'array originale, se inserisco un echo stesso all'interno del ciclo, in questo modo:

    Codice PHP:
    foreach ($armadio as $value) { 
         
    $value[1] = 100
         
    $value[2] = 100
         
    $value[3] = 100

         echo 
    $value[2];

    Pur essendo una copia, $value[2] non dovrebbe valere 100?
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  8. #8
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Perchè, non ti stampa 100 nel ciclo ?

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    420
    eh no... per questo mi sono accorto che qualcosa non va...
    value[2] e tutte le variabili inserite nell'array con la @ risultano NULL;
    se elimino la chiocciola, mi da si gli errori "undefined variable", ma poi me le valorizza correttamente in base alle varie assegnazioni...
    - "Si sono vegetariano. Diciamo che non mangio nulla che abbia un cuore"
    - "E i carciofi?"

  10. #10
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Allora, se fai
    Codice PHP:
    foreach($armadio as $value){
        ....
        
    // modifichi value
        
    ...
    }
    echo 
    $armadio[0][1]; // rimane a null 
    come ti ho detto, $armadio non viene modificaro. Cmq se fai un echo nel foreach $value DEVE valere ciò che gli hai assegnato.
    La @ serve solo a sopprimere gli errori

    Puoi postare il codice completo (al netto di roba superflua)

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