Php 在另一个数组中按属性对数组排序

Php 在另一个数组中按属性对数组排序,php,performance,sorting,quicksort,usort,Php,Performance,Sorting,Quicksort,Usort,我有两个大小相同的数组。一个包含所有产品信息,另一个仅包含产品id和位置。我想按照第二个数组中指定的顺序对第一个数组进行排序。现在我有这个代码,但必须有一个更有效的方法来做到这一点 foreach ($ret_products as $ret_product) { foreach ($sort as $sort_product) { if ($ret_product->id === $sort_product['pro

我有两个大小相同的数组。一个包含所有产品信息,另一个仅包含产品id和位置。我想按照第二个数组中指定的顺序对第一个数组进行排序。现在我有这个代码,但必须有一个更有效的方法来做到这一点

        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;
        });

这将删除双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];
});

这将删除双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];
});

您还可以使用
array\u column($sort,'position,'product\u id')
生成
$order
。这不起作用,得到一个php错误,表示在usort返回中未定义订单。解决方案如下:
usort($ret\u products,function($a,$b)use($order){return$order[$a->id]>order[$b->id];})
您还可以使用
array\u column($sort,'position,'product\u id')
生成
$order
。这不起作用,得到一个php错误,说在usort返回中未定义订单。解决方案如下:
usort($ret\u products,function($a,$b)use($order){return$order[$a->id]>$order[$b->id];})