Массив создания группы на основе определенного значения поля

У меня есть следующий массив

array
(
[0] => Array
(
[market_id] => 10
[competition_id] => 31
)

[1] => Array
(
[market_id] => 10
[competition_id] => 31
)

[2] => Array
(
[market_id] => 11
[competition_id] => 31
)

[3] => Array
(
[market_id] => 11
[competition_id] => 31
)

[4] => Array
(
[market_id] => 11
[competition_id] => 31
)
)

Есть ли одна функция для создания массива ниже из вышеуказанного ввода, или мне нужно вручную просмотреть массив и получить желаемый результат?

array
(
[0] => Array
(
[0] => Array
(
[market_id] => 10
[competition_id] => 31
)
[1] => Array
(
[market_id] => 10
[competition_id] => 31
)
)
[1] => Array
(
[0] => Array
(
[market_id] => 11
[competition_id] => 31
)
[1] => Array
(
[market_id] => 11
[competition_id] => 31
)
[2] => Array
(
[market_id] => 11
[competition_id] => 31
)
)
)

Все, что я хочу, это сгруппировать элементы массива на основе market_id поле.

1

Решение

Нет ярлыков. Создайте новый массив с market_id в качестве ключей, затем удалите временные ключи:

$result = [];
foreach ($array as $item) {
$result[$item['market_id']][] = $item;
}
$result = array_values($result);
1

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

Кроме того, когда вы не хотите делать его в vanilla PHP, вы можете использовать узо-лакомство:

$array = array(
0 => array(
'market_id' => '10',
'competition_id' => '31'
),
1 => array(
'market_id' => '10',
'competition_id' => '31'
),
2 => array(
'market_id' => '11',
'competition_id' => '31'
),
3 => array(
'market_id' => '11',
'competition_id' => '31'
),
4 => array(
'market_id' => '11',
'competition_id' => '31'
)
);

$groupBy = Arrays::groupBy($array, Functions::extract()->market_id);

print_r($groupBy);

И результат:

Array
(
[10] => Array
(
[0] => Array
(
[market_id] => 10
[competition_id] => 31
)

[1] => Array
(
[market_id] => 10
[competition_id] => 31
)

)

[11] => Array
(
[0] => Array
(
[market_id] => 11
[competition_id] => 31
)

[1] => Array
(
[market_id] => 11
[competition_id] => 31
)

[2] => Array
(
[market_id] => 11
[competition_id] => 31
)

)

)

Вот документы для Массивы а также функции.

2

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