Как из массива сформировать строку вида
Есть массив вида:
Array (
[0] => Array
(
[optgroup_id] => 1
[type_id] => 1
[type_title] => по Местности
)
[1] => Array
(
[optgroup_id] => 1
[type_id] => 2
[type_title] => по Обстановке
)
[2] => Array
(
[optgroup_id] => 1
[type_id] => 3
[type_title] => по Персонажу
)
[3] => Array
(
[optgroup_id] => 2
[type_id] => 4
[type_title] => по Цитате
)
[4] => Array
(
[optgroup_id] => 2
[type_id] => 5
[type_title] => по Силуэту
)
)
Подскажите как его преобразовывать в строку вида:
"по Местности, по Обстановке, по Персонажу", "по Цитате, по Силуэту"
Ответы (2 шт):
Автор решения: Kirill
→ Ссылка
$result = [];
foreach ($array as $item) {
$result[$item['optgroup_id']][]= $item['type_title'];
};
$put = '';
foreach ($result as $i) {
$put .= '"' . implode(', ', $i) . '", ';
}
rtrim($put, ', ');
Автор решения: splash58
→ Ссылка
сгруппируйте по optgroup_id и потом в каждой группе сделайте строку из элементов type_title
function array_groupby($array, $fieldname) {
$res = [];
foreach ($array as $x) {
if (is_array($x)) {
$index = $x[$fieldname];
}
elseif (is_object($x)) {
$index = $x->$fieldname;
}
else {
throw new Exception('array_groupby: illegal input array structure');
}
$res[$index][] = $x;
}
return $res;
}
function toString($sep, $col) {
return function ($x) use ($sep, $col) {
return implode($sep, array_column($x, $col)); };
}
$result = array_map(toString(', ', 'type_title'), array_groupby($arr, 'optgroup_id'));
print_r($result); print_r($result);