2010-08-01 14 views
0

J'ai un peu de mal à perdre mon ordre de tableau après avoir utilisé unset(). Voici le code premier:PHP Unset + Undefined Offset

$id = $_GET['id']; 
for($i = 0; $i < count($my_array); $i++) 
{ 
    if($my_array[$i] == $id) 
    { 
     unset($my_array[$i]); 
    } 
} 

Supposons que my_array de $ a 4 articles et my_array $ [1] est égal à $ id. Une fois que j'ai désactivé, j'essaie d'exécuter foreach() sur $ my_array et j'obtiens une erreur Undefined Offset: 1. Quand j'exécute print_r ($ my_array), j'obtiens $ my_array [0], $ my_array [2], et $ my_array [3]. Je comprends parfaitement pourquoi cela se produit, ma question est, est-il un moyen de ré-indexer le tableau de sorte que l'élément 2 «tombe» à l'élément 1, et et le reste des éléments respectivement à la fin du tableau ?

Quelque chose comme reindex ($ my_array) serait doux. Je sais que je pourrais lancer une autre boucle avec une nouvelle matrice et les transférer manuellement, mais une solution en une étape serait géniale. Je ne pouvais rien trouver nulle part.

Répondre

2

Appelez array_values pour réindexer le tableau.

+0

dude vous rock. Bien que j'avais déjà essayé. Nous allons juste blâmer celui-ci sur le fait d'être après 2 heures;) Merci encore –

+0

@Adam Eh bien, il est passé 7 heures ici: p Je suppose que je vais aller dormir aussi. – Artefacto

+0

@Adam Par ailleurs, après le 'unset', vous pouvez itérer le tableau now-one-element-short avec foreach. Si vous réindexez parce que vous allez itérer avec cette boucle, c'est inutile; utilisez simplement 'foreach' ou' reset' et 'next'. – Artefacto

0

Je viens de découvrir que vous pouvez également faire une

array_splice($ar, 0, 0); 

qui fait la inplace re-indexation, afin de ne pas une copie du tableau d'origine.