Как отсортирвоать массив по значениям другого массива?
У меня есть массив и мне нужно его отсортировать в нужном мне порядке по ключам. Там нет какой-то закономерности. Нужна сортировка которую я укажу.
Приведу пример, чтобы было понятнее. Допустим, у есть такой массив:
$array = array( 'second' => 'Чтоб вас оплакивать, мне жизнь сохранена.', 'first' => 'А вы, мои друзья последнего призыва!', 'fourth' => 'А крикнуть на весь мир ваши имена!', 'third' => 'Над вашей памятью не стыть плакучей ивой,', );
И мне нужно отсортировать его по указанному произвольному порядку:
$sort_by = array('first', 'second', 'third', 'fourth');
Чтобы в итоге получилось:
$array = array( 'first' => 'А вы, мои друзья последнего призыва!', 'second' => 'Чтоб вас оплакивать, мне жизнь сохранена.', 'third' => 'Над вашей памятью не стыть плакучей ивой,', 'fourth' => 'А крикнуть на весь мир ваши имена!', );
Вопрос задал, потому что хотелось бы получить какое-то простое решение, а не через перебор массива и сбор нового. Знаете какое-то изящное решение для этой задачи?
Для этого можно использовать array_merge() ибо функция «лепит» значения в порядке указанном в первом массиве.
// исходный массив $array = array( 'second' => 'Чтоб вас оплакивать, мне жизнь сохранена.', 'first' => 'А вы, мои друзья последнего призыва!', 'fourth' => 'А крикнуть на весь мир ваши имена!', 'third' => 'Над вашей памятью не стыть плакучей ивой,', ); // отсортируем по порядку в указанном массиве $sort_by = array('first', 'second', 'third', 'fourth'); $array = array_merge( array_flip($sort_by), $array ); print_r( $array ); /* Получим Array ( [first] => А вы, мои друзья последнего призыва! [second] => Чтоб вас оплакивать, мне жизнь сохранена. [third] => Над вашей памятью не стыть плакучей ивой, [fourth] => А крикнуть на весь мир ваши имена! ) */