Предполагая, что таблица записей $products
может быть написана на PHP следующим образом:
// restructure array as merchants having nested record sets
$merchants = [];
foreach(array_unique(array_column($products, 'merchant')) as $merchant)
$merchants[$merchant] = array_values(array_filter($products, function($v)use($merchant){ return $v->merchant === $merchant;}));
// itererate over indexes up do max. products per merchant and a add a product of
// each merchant having a record with that index
$max_count = max(array_map(function($v){return count($v);}, $merchants));
$new_order = [];
for($i = 0; $i<$max_count; $i++)
foreach ($merchants as $merchant)
if($item = $merchant[$i] ?? false)
$new_order[] = $item;
var_dump($new_order);
В соответствии с вашими комментариями у вас, похоже, есть объект, который вы назвали "list", похожим на этот:
$products_object = (object)
[
(object)[
'merchant' => 'theredshop',
'name' => 'pepsi',
],
(object)[
'merchant' => 'sevel',
'name' => 'pepsi',
],
(object)[
'merchant' => 'sevel',
'name' => 'lorem',
],
(object)[
'merchant' => 'sevel',
'name' => 'ipsum',
],
(object)[
'merchant' => 'bluecircle',
'name' => 'ipsum',
],
];
Сначала преобразуйте его в массив, чтобы работать с функциями массива:
$products = (array) $products_object;