Переставить массив по массиву индексов - PHP

0

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

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

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

Изменить - Код в соответствии с запросом:

//$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 ?
  • 0
    @ mend3 ksort () сортирует по ключу - входной массив уже отсортирован по ключу и должен быть отсортирован в том же порядке, что и значения в другом массиве.
Теги:
arrays

1 ответ

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
    Спасибо за ваш ответ, это будет работать отлично. Мне просто любопытно, есть ли альтернативный способ решения этой проблемы, независимо от того, спасибо за быстрый и рабочий ответ, который я могу использовать!
  • 0
    Для начала вы можете пропустить array_keys() как я только что добавил. Если я придумаю способ использования встроенных функций array_*() я опубликую его, но, честно говоря, я бы просто использовал цикл.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню