Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193

    foreach e consistenza elementi dell'array

    Ma in un loop del tipo

    codice:
    foreach($arr as $k => $val)
    {
       // faccio delle cose
    }
    Quelle cose che faccio... possono essere rimozioni od ordinamento dell'array stesso? Ad esempio:

    unset($arr[$k]);

    ksort($arr, SORT_NUMERIC);

    Cosa succede al ciclo? Esplode?

  2. #2
    foreach scompone chiave valore.

    ksort non avrebbe senso. unset in quel punto equivale a fare:
    $arr = array();


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Non sono mica tanto d'accordo...

    unset($arr[$k]) elimina l'elemento indicizzato da $k, ed ha senso, come ha senso se fai echo($arr[$k]), non per forza devo usare $val.

    E ksort() non vedo perchè dovrebbe resettare l'array ad un array vuoto???

  4. #4
    Non essere d'accordo e' tra i tuoi diritti.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    codice:
    $arr = array('a'=>'ananas', 'b'=>'banana', 'c'=>'ciliegia');
    
    foreach($arr as $k => $val)
    {
    	if($k == 'b')
    	{
    		unset($arr[$k]);
    	}
    }
    
    print_r($arr);
    L'output:

    codice:
    found ananas at a
    found banana at b
    found ciliegia at c
    
    Array
    (
        [a] => ananas
        [c] => ciliegia
    )
    ...non mi sembra che sia un array vuoto alla fin fine.


  6. #6
    Certo.

    Spiega anche perche' fai un foreach per fare l'unset() di una chiave che conosci a priori.
    codice:
    $arr = array('a'=>'ananas', 'b'=>'banana', 'c'=>'ciliegia');
    
    unset($arr['b']);
    
    print_r($arr);
    In ogni caso nel primo post avevi esposto le cose diversamente. Ma fa lo stesso.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di Cerebro
    Registrato dal
    Jan 2005
    Messaggi
    193
    Originariamente inviato da piero.mac

    In ogni caso nel primo post avevi esposto le cose diversamente. Ma fa lo stesso.
    Senza polemica ma mi sembra di aver scritto correttamente, al posto del commento dentro al ciclo potevano starci quelle due cose, o un unset() o un ksort()...

    Per spiegare a cosa mi serve, anche se non è rilevante, è che gli elementi dell'array sono nomi di funzioni (una sorta di lista di task) e la chiave un timestamp che dice quando eseguire quella funzione, ma la chiave potrebbe essere benissimo un intero e il timestamp tenerlo dentro un ulteriore array annidato, ma non è importante questo.

    Il foreach scorre le funzioni, controlla se il time() è > del timestamp, nel qual caso esegue la funzione.

    Capita che una volta eseguito un task (funzione), essa debba essere tolta dalla lista dei task (array), e mi chiedevo se era consistente farlo dentro il foreach mentre esso gira oppure faccio l'unset() e magari un break e poi ricomincio da capo il foreach (se tutto è dentro un while(1) {...} ) Al momento faccio un break.

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.