12

I have an array with numerical indices, which looks like this (after I unset some elements):

$array = [
    23 => 'banana',
    3 => 'apple',
    5 => 'pear',
];

Which function do I use to reorder them based on their key order to:

$array = [
    0 => 'apple',
    1 => 'pear',
    2 => 'banana',
];

I tried some of the sort functions but none of them provided the output I need.

Dharman
  • 30,962
  • 25
  • 85
  • 135
ajsie
  • 77,632
  • 106
  • 276
  • 381

3 Answers3

25

If you want to sort the array by key value use ksort():

ksort($array);
print_r($array);

Output:

Array
(
    [3] => apple
    [5] => pear
    [23] => banana
)

That will preserve the keys however. To reassign keys for an array from 0 onwards use array_values() on the result:

ksort($array);
$array_with_new_keys = array_values($array); // sorted by original key order
print_r($array_with_new_keys);

Output:

Array
(
    [0] => apple
    [1] => pear
    [2] => banana
)
Dharman
  • 30,962
  • 25
  • 85
  • 135
cletus
  • 616,129
  • 168
  • 910
  • 942
  • 2
    Cletus, he doesn't want to sort by value (look: apple, pear, banana). sort() will do: apple, BANANA, pear. Look at my answer. – Seb Dec 23 '09 at 01:00
10

ksort() will sort by key, then get the values with array_values() and that will create a new array with keys from 0 to n-1.

ksort($array)
$array = array_values( $array );

Of course, you don't need ksort if it's already sorted by key. You might as well use array_values() directly.

Seb
  • 24,920
  • 5
  • 67
  • 85
4
$arrayOne = array('one','two','three'); //You set an array with certain elements
unset($array[1]);                       //You unset one or more elements.
$arrayTwo = array_values($arrayOnw);    //You reindex the array into a new one.

print_r($arrayTwo);                     //Print for prove.

The print_r results are:

Array ( [0] => one [1] => three )
johnnyArt
  • 4,327
  • 5
  • 29
  • 28