PHP: Reassign array keys
Asked Answered
B

3

6

I have an array of numbers from descending order. When I add to this array, I add to the end and then do natsort($times). $times then looks like this (obtained by print_r):

Array
(
    [0] => 0.01
    [1] => 0.02
    [2] => 0.05
    [3] => 0.08
    [7] => 0.10   <-- Just added and natsorted
    [4] => 0.11
    [5] => 0.14
    [6] => 0.21
)

However, I wish to reassign all the keys so that the just-added 0.10 is array index 4 making it easy to see what place the new time is in. ie "your ranking is $arrayindex+1"

Besides copying this whole array into a new array to get new keys, is there a better way?

Boser answered 7/8, 2011 at 9:5 Comment(0)
H
22

You can use sort [docs] with SORT_NUMERIC, instead of natsort:

sort($times, SORT_NUMERIC);

Unlike natsort, it re-indexes the array.


There is no built in way to re-index the array after/while sorting. You could also use array_values [docs] after sorting with natsort:

$times = array_values($times);

This is copying the array though.

Halbert answered 7/8, 2011 at 9:9 Comment(3)
Why should he? Is this faster?Zosema
@Jitamaro: What do you mean? I mean he should use sort instead of natsort. This will be faster (well, depends on what array_values is doing under the hood, but it is likely that calling only one method is faster than calling two).Halbert
sort($times, SORT_NUMERIC); worked perfectly for me as an alternative to natsortBoser
Z
8

You can do this with array_values.

$times=array_values($times);
Zosema answered 7/8, 2011 at 9:9 Comment(0)
C
2

usort reassigns array keys after sorting, use it with strnatcmp:

usort( $times, 'strnatcmp' );
Cleon answered 7/8, 2011 at 9:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.