Visualizzazione dei risultati da 1 a 7 su 7

Discussione: unset array problema

  1. #1

    unset array problema

    vorrei eliminare un elemento di un array(keys) dichiarato fuori dalla funzione ad ogni chiamata dalla seguente funzione (recover),ma unset non sembra cancellare nulla.


    codice:
    $keys = array('a','b','3','d','e','f','g');
    
     function recover($array,$index,$offset)
     {
    	
    	$ch='';
    	$len = count($array);
    	
    	$index=$index+$offset;
    	
    	//elimino l'elemento in quella posizione
    	if(abs($index)>=$len)
    	{
    		$pos = $index%$len;
    	}
    	else
    	{
    		$pos = $index;
    	}
    	$ch = $array[$pos];
    	unset($keys[$pos]);
    	return $ch;
     }

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    come chiami la funzione?

  3. #3
    $a =recover($keys,'3','0');
    $b =recover($keys,'3','0');
    $c =recover($keys,'120','4');

    $a e $b mi da sempre d ma $b dovrebbe essere diverso....

  4. #4
    Guarda che la funzione unset() elimina il valore contenuto nell'array ma NON la posizione che esso occupava. In pratica non effettua lo shift degli elementi.
    Da manuale:

    codice:
    Note:
    
    The unset() function allows removing keys from an array. 
    Be aware that the array will not be reindexed. 
    If a true "remove and shift" behavior is desired, the array can be reindexed using the array_values() function.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    si mi sono accorto per rifare l'indice consigliano array_values(),ma non mi fa

  6. #6
    cioè mi fa,ma non mi salva le nuove posizioni

  7. #7
    Devi lavorare per riferimento e non per valore. Modifica così:

    Codice PHP:
    <?php
    $keys 
    = array('a','b','3','d','e','f','g');

     function 
    recover(&$array,$index,$offset)
     {
        
        
    $ch='';
        
    $len count($array);
        
        
    $index=$index+$offset;
        
        
    //elimino l'elemento in quella posizione
        
    if(abs($index)>=$len)
        {
            
    $pos $index%$len;
        }
        else
        {
            
    $pos $index;
        }
        
    $ch $array[$pos];
        unset(
    $array[$pos]);
        
    $array array_values($array);
        return 
    $ch;
     }


    print_r($keys);
    echo 
    "
    "
    ;

    $a recover($keys,'3','0');
    echo 
    $a."
    "
    ;

    print_r($keys);
    echo 
    "
    "
    ;

    $b recover($keys,'3','0');
    echo 
    $b."
    "
    ;

    print_r($keys);
    echo 
    "
    "
    ;
    ?>
    Se noti, ho aggiunto & al parametro in inputr alla funzione. In tal modo lo passi per riferimento e non per valore e le modifiche apportate nella funzione si ripercuotono sull'array originale.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.