2010-11-08 6 views
0

Salut J'ai un tableau, j'ai besoin de changer les clés, d'une manière ordonnée mais ne change pas l'ordre des valeurs. par exemple.php array re populate keys

$a = array (
0=>'h', 
1=>'blabla', 
2=>'yes' 
); 

J'utilisé

unset($a[1]); 

mais j'ai besoin la clé pour relancer le calcul des clés 0,1,2 ... etccc donc je ne finis pas avec:

array(
0 => 'h', 
2 => 'yes' 
) 

mais il devrait venir retour:

array(
0 => 'h', 
1 => 'yes' 
) 

Répondre

3

Appel array_values sur elle:

$a = array (
0=>'h', 
1=>'blabla', 
2=>'yes' 
); 

unset($a[1]); 

$a = array_values($a); 

var_dump($a); 
/* 
array(2) { 
    [0]=> 
    string(1) "h" 
    [1]=> 
    string(3) "yes" 
} 
*/ 
5

Vous devez appliquer array_values sur votre tableau pour ré-indexer.

$a = array_values($a); 

Bonus: Si vous devez également commander vos valeurs que vous pouvez utiliser sort et aussi ré-indexer votre tableau.

Remarque: En utilisant l'une des valeurs array_values ​​ou le tri vous perdrez toutes les clés de chaîne que vous pourriez avoir.

2

Vous pouvez également utiliser array_splice() au lieu de unset(), qui réindexer automatiquement les éléments du tableau:

$a = array (
0=>'h', 
1=>'blabla', 
2=>'yes' 
); 

array_splice($a,1,1); 

var_dump($a); 
+0

Mais c'est un peu d'un surpuissant. Il y a d'autres fonctions qui le feront. array_merge par exemple (pour son cas). –

+1

Est-ce vraiment exagéré par rapport à l'exécution d'un array_values ​​() immédiatement après un unset()? –

+0

En supposant qu'il veut éliminer exactement un élément, je suppose qu'il peut être un peu plus rapide avec array_splice, mais je n'ai aucune preuve sérieuse. De plus PHP n'est pas exactement un langage où la vitesse devrait être la priorité :). Je vais vous donner un +1 pour que votre solution combo soit désactivée et ré-indexée. –