Skip to content

Instantly share code, notes, and snippets.

@Ellrion
Created August 22, 2017 15:28
Show Gist options
  • Save Ellrion/a3145621f936aa9416f4c04987533d8d to your computer and use it in GitHub Desktop.
Save Ellrion/a3145621f936aa9416f4c04987533d8d to your computer and use it in GitHub Desktop.
Сортировка ассоциативного массива в порядке указанном массивом ключей.
<?php
if (!function_exists('array_sort_by_keys_array')) {
/**
* Сортировка ассоциативного массива в порядке указанном массивом ключей.
*
* @param array $array Входной массив.
* @param array $sorter Массив ключей в нужном порядке.
*
* @return bool
*/
function array_sort_by_keys_array(array &$array, array $sorter)
{
$sorter = array_intersect($sorter, array_keys($array));
$array = array_merge(array_flip($sorter), $array);
return true;
}
}
@Ellrion
Copy link
Author

Ellrion commented Aug 22, 2017

Example:

<?php
$arr = ['q' => 1, 'r' => 2, 's' => 5, 'w' => 123];

array_sort_by_keys_array($arr, ['q', 'w', 'e']);

print_r($arr); 

/*
Array
(
    [q] => 1
    [w] => 123
    [r] => 2
    [s] => 5
)
*/

@andrey-helldar
Copy link

Насколько обязателен return true; у функции?
Имхо, он не нужен. Или я ошибаюсь?

@Ellrion
Copy link
Author

Ellrion commented Jan 30, 2018

@andrey-helldar,

Насколько обязателен return true; у функции?

Сделано так как все сортирующие функции для массивов возвращают bool значение (false в случае ошибки) а сам результат их сортировки это изменение массива. Так что эта функция написана с "сохранением стиля" так сказать.
Естественно ничего не мешает переписать ее для иного поведения.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment