2010-03-04 4 views
5
(I'm a beginner) 

Mon script utilise assez longuement la normetouches numériques array_diff et renumérotation

$c = 0; 
$t = count($array); 

while ($c < $t) { 
    $blah = $array[$c]; 
    ++$c; 
} 

. Mais je viens juste de tomber dans une situation où j'ai aussi besoin de array_diff et ça casse tout ça en enfer parce que maintenant les clés numériques ont des trous. Je reçois des erreurs Undefined offset partout. Comment réinitialiser les touches numériques d'un tableau? L'ordre des objets dans le tableau est sans importance.

Répondre

25

Pour réinitialiser les touches, vous pouvez utiliser array_values():

$array = array_values($array); 
7

Vous n'avez pas besoin de réinitialiser les clés de vous tableau: vous devez changer la façon dont vous allez à travers elle.

Au lieu d'utiliser une boucle while et accéder aux elemnts du tableau par index, vous devez utiliser une boucle foreach, qui ne vous obtenir des éléments du tableau:

foreach ($array as $key => $value) { 
    // $key contains the index of the current element 
    // $value contains the value of the current element 
} 
+0

+1 pour vous parce que je vais certainement utiliser cette connaissance ailleurs. Mais le chèque doit aller à Tatu pour avoir touché le bullseye. Merci Pascal. – Drew

+0

@Andrew: de rien :-) ;; Oui, je sais que je ne répondais pas vraiment à la question, mais je pensais que cela serait utile de toute façon * (et j'utilise toujours foreach pour boucler les éléments des tableaux) * ;; et comme j'ai vu une autre réponse déjà parlé de 'array_values', je ne l'ai pas mis dans le mien. –

+0

Je vous remercie d'avoir pris le temps de répondre, vraiment. Je me mouille toujours les pieds et je suis reconnaissable dans la phase «J'ai vraiment un marteau kickass» d'apprendre à programmer. Encore une fois, je vous remercie de l'expansion exponentielle et utile vers la conception de code plus approprié. – Drew

2

Merci Tatu.

Pour le lulz, je vais partager avec vous le hack suivant idiote je en attendant une réponse raisonnable:

$badArray = array_diff($allData, $myData); 

$string = implode(",",$badArray); 

$dump = explode(",",$string); 

$goodArray = $dump; 

travaillé. Je me suis senti tout sale, mais ça a marché.

Questions connexes