WordPress как на ладони

Как отсортирвоать массив по значениям другого массива?

У меня есть массив и мне нужно его отсортировать в нужном мне порядке по ключам. Там нет какой-то закономерности. Нужна сортировка которую я укажу.

Приведу пример, чтобы было понятнее. Допустим, у есть такой массив:

$array = array(
	'second' => 'Чтоб вас оплакивать, мне жизнь сохранена.',
	'first'  => 'А вы, мои друзья последнего призыва!',
	'fourth' => 'А крикнуть на весь мир ваши имена!',
	'third'  => 'Над вашей памятью не стыть плакучей ивой,',
);

И мне нужно отсортировать его по указанному произвольному порядку:

$sort_by = array('first', 'second', 'third', 'fourth');

Чтобы в итоге получилось:

$array = array(
	'first'  => 'А вы, мои друзья последнего призыва!',
	'second' => 'Чтоб вас оплакивать, мне жизнь сохранена.',
	'third'  => 'Над вашей памятью не стыть плакучей ивой,',
	'fourth' => 'А крикнуть на весь мир ваши имена!',
);

Вопрос задал, потому что хотелось бы получить какое-то простое решение, а не через перебор массива и сбор нового. Знаете какое-то изящное решение для этой задачи?

0
Гость
7.2 года назад
  • 0
    Kama9613

    Для этого можно использовать 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] => А крикнуть на весь мир ваши имена!
    )
    */
    
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация