2015-02-02 2 views
0

У меня есть массив $Percentages1, что я заказал в порядке убывания с использованием arsort(), а затем я взял массив, содержащий новый ключ порядка с использованием array_keys() под названием $keyorderПерестановка массив, массив индексов - PHP

Мой вопрос как мне теперь переставить другой массив $Percentages2 в тот же ключевой порядок как $Percentages1?

Любая помощь будет принята с благодарностью, спасибо большое!

Edit - Код по запросу:

//$Percentages1 before sort for example = 
// Array ([0] => 5.10 [1] => 1.52 [2] => 8.42 [3] => 1.11 [4] => 1.35) 
arsort($Percentages1); 
//$Percentages1 after sort = 
// Array ([2] => 8.42 [0] => 5.10 [1] => 1.52 [4] => 1.35 [3] => 1.11) 
$keyorder = array(); 
//So $keyorder is = 
// Array ([0] => 2 [1] => 0 [2] => 1 [3] => 4 [4] => 3) 
$keyorder = array_keys($Percentages1); 

//Now I want to do something here to rearrange a $Percentages2 array 
//in the same index order as $keyorder. 
//For example from this 
// Array ([0] => 2.50 [1] => 3.52 [2] => 9.42 [3] => 9.81 [4] => 0.35) 
//To... 
// Array ([2] => 9.42 [0] => 2.50 [1] => 3.52 [4] => 0.35 [3] => 9.81) 
+0

сделал вы пытались использовать [ksort] (http://php.net/manual/en/function.ksort. php)? – mend3

+0

@ mend3 ksort() сортирует по ключу - входной массив уже отсортирован по ключу и нуждается в сортировке в том же порядке, что и значения в другом массиве. –

ответ

0

Если вы не неблагоприятные для создания другого переменного массива, самый простой курс здесь просто петлю над $keyorder и добавить на соответствующем ключе элементов из $Percentages2 на а новый массив ;.

// Sorted as you already have it... 
$keyorder = array_keys($Percentages1); 
// Final array 
$output = array(); 
foreach ($keyorder as $key) { 
    $output[$key] = $Percentages2[$key]; 
} 

// Don't need the source anymore 
unset($Percentages2); 

Их порядок ключей прилагаемые на $output будет сохранен в конечном итоге.

Учитывая ваши входные массивы, это производит

print_r($output); 
Array 
(
    [2] => 9.42 
    [0] => 2.5 
    [1] => 3.52 
    [4] => 0.35 
    [3] => 9.81 
) 

Вы на самом деле не нужно использовать array_keys(). После вызова arsort(), вы можете foreach над отсортированный $Percentages1 и сортировать по $output по ключу:

// Skip array_keys, and read the sorted array directly 
arsort($Percentages1); 
foreach ($Percentages1 as $key => $value) { 
    // Same as before inside the loop 
    $output[$key] = $Percentages2[$key]; 
} 
+0

Спасибо за ваш ответ, это сработает отлично. Мне просто интересно, есть ли альтернативный способ справиться с этим, независимо от того, спасибо за быстрый и рабочий ответ, который я могу использовать! – 4D4C

+0

Для начала вы можете пропустить 'array_keys()', как я только что добавил. Если я думаю о способе использования собственных 'array _ *()' функций, я опубликую его, но, честно говоря, я бы просто использовал цикл. –

+0

Просто увидел твою правку - А я вижу! Это здорово, спасибо! – 4D4C

Смежные вопросы