Задать вопрос
@Formula_1

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

Вопрос: как можно отсортировать массив значениями другого массива?
Например, есть многомерный массив вида:
[
    [0] => [
        [course_id] => 100
        [name] => Организация работы в летних оздоровительных лагерях
    ]
    [1] => [
        [course_id] => 50
        [name] => Педагогическое образование: учитель технологии
    ]
    [2] => [
        [course_id] => 150
        [name] => Специалист в сфере закупок
    ]
]

и есть второй массив:
[
    [0] => [
        [course_id] => 150
    ]
    [1] => [
        [course_id] => 50
    ]
    [2] => [
        [course_id] => 100
    ]
]

Как можно отсортировать первый массив (по ключу 'course_id') значениями 'course_id' второго массива?
  • Вопрос задан
  • 454 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 2
DevMan
@DevMan
$a1 = array_column($a1, null, 'course_id');
$sorted = array_map(function($v) use ($a1) {
	return $a1[$v];
}, array_column($a2, 'course_id'));
print_r($sorted);

ideone.com/KcKHiq
Ответ написан
Комментировать
@vyrkmod
Пишу на php. И не стыдно.
Вообще, есть usort. Хотя тут лучше "в лоб":
$sorted = [];
foreach($order as $oitem) {
    foreach ($unsorted as $key => $uitem) {
        if($oitem['course_id'] == $uitem['course_id']) {
            $sorted[] = $uitem;
            unset($unsorted[$key]);
            break;
        }
    }
}
foreach ($unsorted as $uitem) {
    $sorted[] = $uitem;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
kulakoff
@kulakoff
Vue.js developing
Работать, соответственно, будет только когда длины массивов равны:
var arr1 = [
  {course_id: 50, name: "name 1"},
  {course_id: 150, name: "name 2"},
  {course_id: 100, name: "name 3"}
]
var arr2 = [
  {course_id: 150},
  {course_id: 50},
  {course_id: 100}
]

var res = arr1.map((el,idx) => {
    el.course_id = arr2[idx].course_id
    return el
  }).sort((a,b) => a.course_id-b.course_id)

console.log(res)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы