PHP
Reindex Numeric Array Keys After Filtering or Deletion
Learn to reindex a PHP array's numeric keys sequentially after elements have been removed or filtered, ensuring proper array structure and iteration.
<?php
$data = ['apple', 'banana', 'orange', 'grape', 'kiwi'];
// Scenario 1: Removing an element using unset()
unset($data[1]); // Remove 'banana'
unset($data[3]); // Remove 'grape'
print_r($data);
/* Output before reindexing:
Array
(
[0] => apple
[2] => orange
[4] => kiwi
)
*/
$reindexedData = array_values($data);
print_r($reindexedData);
/* Output after reindexing:
Array
(
[0] => apple
[1] => orange
[2] => kiwi
)
*/
// Scenario 2: Reindexing after array_filter()
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$evenNumbers = array_filter($numbers, function($num) {
return $num % 2 == 0;
});
// $evenNumbers will have keys [1 => 2, 3 => 4, 5 => 6, ...]
print_r($evenNumbers);
/* Output before reindexing:
Array
(
[1] => 2
[3] => 4
[5] => 6
[7] => 8
[9] => 10
)
*/
$reindexedEvenNumbers = array_values($evenNumbers);
print_r($reindexedEvenNumbers);
/* Output after reindexing:
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
*/
?>
How it works: When elements are removed from an array using `unset()` or when an array is filtered using `array_filter()`, the original numeric keys are often preserved, leading to non-sequential gaps in the keys. The `array_values()` function is crucial for resetting and reindexing these numeric keys, ensuring they become sequential starting from 0. This is important for loops expecting consecutive indices or when consistent array structures are required.