2016-04-14 2 views
0

Как бы отсортировать массив, в котором значения перемещаются, а индекс остается неподвижным. Я написал этот код ниже, хотя ответ, который он дал, не идеален.Сортировка массива, чтобы индекс не двигался?

$array = array(6,2,22,15,33,40,30,70,65); 
asort($array,); 
print_r($array); 

Теперь это сортирует значения, но индекс перемещается со значением. Я получаю ответ;

Array ([1] => 2 [0] => 6 [3] => 15 [2] => 22 [6] => 30 [4] => 33 [5] => 40 [8] => 65 [7] => 70) 

Хотя я бы хотел, чтобы это показывалось следующим образом;

Array ([0] => 2 [1] => 6 [2] => 15, etc. 

Спасибо!

+1

*** a ** ssociative sort() * – Rizier123

+5

Используйте sort(), а не asort() –

+0

Это парадокс ... вы хотите, чтобы индексы придерживались, но не придерживались ... как @MarkBaker говорит : использовать sort() –

ответ

0

Использование array_combine() *

Он объединяет два массива в один, используя первый как набор ключей, а второй в качестве набора значений для нового массива.

Так что вам нужно только получить исходные ключи и отсортированные значения, а затем подать их на array_combine().

$a = [ 
    'a' => 'orange', 
    'b' => 'apple', 
    'o' => 'banana', 
]; 

$tmp = $a; 
sort($tmp); 
$result = array_combine(array_keys($a), $tmp); 

var_dump($a, $result); 

Вы можете попробовать: here.

Cheers.


*: доступен из PHP 5.