PHP重建索引数组?

时间:2010-12-08 23:52:22

标签: php arrays indexing reset

再次原谅我的noobness。我有一个包含20多个值的数组,我每20个数据推入数据库,然后将它们从数组前面切掉。我想重新启动数组的索引回到0,但是即使我使用array_values,它也会从20开始。我也尝试过array_merge(array(),$ string)怎么办?

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
}

相反,我得到

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)

3 个答案:

答案 0 :(得分:12)

我通常会这样做:

$array = array_values($array);

看起来你已经完成了大部分工作 - 只是忘了将新数组分配给旧变量。

答案 1 :(得分:0)

将重建索引数组的返回值分配给它:

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
}

或者,正如Brad建议的那样:

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!

with:

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

答案 2 :(得分:0)

我会看看array_shift。当你从阵列中“弹出”它们时,这可能就是你正在寻找的东西。

修改

此外,无论何时处理数组和循环,最好还是要保持数组可能变短的事实。也就是说,我强烈建议不对固定for(... <20 ...)进行编码,但使用$end = (count($array) < 20 ? count($array) : 20);等变量