Откуда «Illegal string offset ***» при присвоение значения массиву?
у вас лажа со скобками
То что - вижу.
1) Квадратная скобка в конце лишняя, она должна быть справа
2) Сделал бы так$flat = [];
$titleParam = $param['id'][$fieldTitle];
$imagesParam = $param['id']['images'];

$flat[titleParam] = $param['property_value'];
if (!isset($flat[$imagesParam])) {
    $flat[$imagesParam] = [];
}
$flat[$imagesParam][] = $param['property_value'];