2010-12-08 7 views
3

Verzeihen Sie meine Noobness wieder. Ich habe ein Array mit mehr als 20 Werten und ich nehme alle 20 in meine Datenbank und hacke sie dann von der Vorderseite des Arrays. Ich möchte die Indizes des Arrays wieder auf 0 starten, aber stattdessen beginnt es bei 20, auch wenn ich array_values ​​verwende. Ich habe auch array_merge (array(), $ string) versucht. Was tun?PHP ein Array neu indizieren?

if($x%20 == 0){ 
    var_dump($string) // original array 
    get_string($string, $body, $binary); //puts the 20 string into my db 

    for($y=0; $y <20; $y++) //done with the 20 so I'm removing them 
     unset($string[$y]); 

    array_values($string); //reindex set $string[20] to $string[0] PLEASE! 
    var_dump($string); // this is suppose to be reindexed 
} 

Stattdessen bekomme ich

array // original array 
    0 => string '----' (length=25) 
    1 => string '----' (length=15) 
    2 => string '----' (length=27) 
    3 => string '----' (length=22) 
    4 => string '----' (length=23) 
    5 => string '----' (length=21) 
    6 => string '----' (length=26) 
    7 => string '----' (length=23) 
    8 => string '----' (length=24) 
    9 => string '----' (length=31) 
    10 => string '----' (length=19) 
    11 => string '----' (length=22) 
    12 => string '----' (length=24) 
    13 => string '----' (length=24) 
    14 => string '----' (length=25) 
    15 => string '----' (length=12) 
    16 => string '----' (length=16) 
    17 => string '----' (length=15) 
    18 => string '----' (length=23) 
    19 => string '----' (length=15) 
    20 => string '----' (length=16) 
    21 => string '----' (length=27) 

array //reindexed array? This was suppose to be [0] and [1] 
    20 => string '----' (length=16) 
    21 => string '----' (length=27) 

Antwort

12

ich in der Regel tun:

$array = array_values($array); 

Sieht aus wie Sie die meisten der Weg dorthin bekam - nur das neue Array zur alten Variablen zuweisen vergessen zu.

+0

zu verwenden. Ich denke, ich habe heute Abend zu viel programmiert. Vielen Dank – Chenelle

+2

Ich verehre die Inkonsistenzen von PHP! – Scuzzy

+0

Sehr schöner Vorschlag Hamish. Ich mag das. – Bakhtiyor

0

Weisen Sie den Rückgabewert der reindexed Array zurück, um es:

if($x%20 == 0){ 
    var_dump($string) // original array 
    get_string($string, $body, $binary); //puts the 20 string into my db 

    for($y=0; $y <20; $y++) //done with the 20 so I'm removing them 
     unset($string[$y]); 

    $string = array_values($string); //reindex set $string[20] to $string[0] PLEASE! 
    var_dump($string); // this is suppose to be reindexed 
} 

OR, wie Brad ersetzen schlägt vor:

for($y=0; $y <20; $y++) //done with the 20 so I'm removing them 
      unset($string[$y]); 

     $string = array_values($string); //reindex set $string[20] to $string[0] PLEASE! 

mit:

for($y=0;$y<20; $y++) 
    array_shift($string); 
0

Ich würde eine haben Blick auf array_shift. Das kann tun, wonach Sie suchen, wenn Sie sie aus dem Array "herauspoppen".

EDIT

Auch wenn Sie mit Arrays und Schleifen zu tun hat, dann ist es eine gute Idee, das Gewissen der Tatsache zu halten, dass das Array kurz kommen kann. Das heißt, ich schlage vor, die feste for(... <20 ...) nicht zu kodieren, sondern eine Variable wie $end = (count($array) < 20 ? count($array) : 20);