Сортировать массив по свойству в другом массиве

У меня есть два массива одинакового размера. Один содержит всю информацию о продукте, а другой содержит только product_id и position. Я хочу упорядочить первый массив в порядке, указанном во втором массиве. Прямо сейчас у меня есть этот код, но должен быть более эффективный способ сделать это.

        foreach ($ret_products as $ret_product) {
foreach ($sort as $sort_product) {
if ($ret_product->id === $sort_product['product_id']) {
$ret_product->sort_position = $sort_product['position'];
}
}
}
usort($ret_products, function($a, $b){
return $a->sort_position > $b->sort_position;
});

0

Решение

Это удаляет двойной цикл for:

$order = [];
foreach ($sort as $sort_product) {
$order[$sort_product['product_id']] = $sort_product['position'];
}

usort($ret_products, function($a, $b) use ($order) {
return $order[$a->id] > $order[b->id];
});
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]