Простите мою бодрость снова. У меня есть массив с 20 + значениями в нем, и я беру каждые 20, чтобы запихнуть в мою базу данных, а затем вырезать их с передней части массива. Я хочу перезапустить индексы массива до 0, но вместо этого он начинается с 20, даже когда я использую array_values. Я также попробовал 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)
Обычно я делаю:
$array = array_values($array);
Похоже, вы получили большую часть пути – просто забыл назначить новый массив старой переменной.
Назначьте возвращаемое значение повторно проиндексированного массива:
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 }
с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 }
ИЛИ, поскольку Брэд предлагает заменить:
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!
с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!
с:
for($y=0;$y<20; $y++) array_shift($string);
Я бы посмотрел на array_shift . Это может делать то, что вы ищете, поскольку вы «выталкиваете» их из массива.
РЕДАКТИРОВАТЬ
Кроме того, всякий раз, когда вы имеете дело с массивами и циклами, неплохо сохранить совесть о том, что массив может оказаться коротким. То есть я настоятельно рекомендую не кодировать фиксированное значение for(... <20 ...)
но использовать переменную типа $end = (count($array) < 20 ? count($array) : 20);