У меня есть следующий массив
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 поле.
Нет ярлыков. Создайте новый массив с market_id в качестве ключей, затем удалите временные ключи:
$result = [];
foreach ($array as $item) {
$result[$item['market_id']][] = $item;
}
$result = array_values($result);
Кроме того, когда вы не хотите делать его в 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
)
)
)