После использования array_unique
массив без дубликатов значений будет удален. Тем не менее, похоже, что ключи также удалены, что оставляет пробелы в массиве с числовыми индексами (хотя это хорошо для ассоциативного массива). Если я повторяю использование цикла for, я должен учитывать отсутствующие индексы и просто копировать ключи в новый массив, но это кажется неуклюжим.
В PHP, как я могу исправить недостающие ключи в массиве?
Ответ 1
$foo = array_values($foo);
будет повторно указывать массив для вас
Ответ 2
Вместо использования для циклов это звучит так, как будто вы должны использовать foreach loop. По-видимому, вы все равно не интересуетесь индексами, поскольку вы их перенумеруете.
Этот цикл:
for ($i = 0; $i < $loopSize; $i++)
{
process($myArray[$i]);
}
превращается в
foreach($myArray as $key=> $value)
{
process($value);
/** or process($myArray[$key]); */
}
or even more simply
foreach($myArray as $value)
{
process($value);
}
Ответ 3
В немногих случаях, которые я пытался использовать вместо foreach, я вскоре пожалел об этом.
Этого всегда можно избежать, вы даже можете использовать foreach, но игнорируете значения и используете ключ, почти забывая, что его foreach вместо этого, но избегайте любых пробелов в ваших ключах и автоматически обходите свои ограничения без длина/мин/макс или что-то еще.
ех.
foreach($myArray as $key=>$val)
{
myArray[$key] = myFunction(myArray[$key]);
}
Я особенно нашел это полезным с параллельными массивами.
$a = getA(); $b = getB();
foreach($a as $key=>val)
{
$sql = "INSERT INTO table (field1, field2) VALUES ($a[$key], $b[$key])";
}