У меня есть массив с именем $ fields, и я продолжаю помещать в него элементы в несколько уровней цикла. Шаблон элементов, которые нужно нажать, очень похож, и код повторяется. Есть ли лучший способ реализовать в PHP или Laravel.
Мой результат должен быть примерно таким: Мой код выглядит как
foreach ($systems as $system) {
$order++;
$systemLevel++;
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeInt, self::LBL_ZABBIX_MAP_NAME => $lbl_map_order . $order, self::LBL_ZABBIX_MAP_VALUE => $systemLevel];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeStr, self::LBL_ZABBIX_MAP_NAME => $lbl_map_name . $order, self::LBL_ZABBIX_MAP_VALUE => $system->map_name];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeMap, self::LBL_ZABBIX_MAP_NAME => $lbl_map_id . $order, self::LBL_ZABBIX_MAP_VALUE => $system->map_id];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeInt, self::LBL_ZABBIX_MAP_NAME => $lbl_parent_map_id . $order, self::LBL_ZABBIX_MAP_VALUE => $parentOrder];
$siteParentOrder = $order;
foreach ($local_sites as $local_site) {
$local_site_acronym = $local_site->acronym;
$sites = CmsSiteStructure::getChildElement($system->map_id, $local_site_acronym); //Eg : MS-ML, SS-ML
foreach ($sites as $site) {
$order++;
$siteLevel++;
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeInt, self::LBL_ZABBIX_MAP_NAME => $lbl_map_order . $order, self::LBL_ZABBIX_MAP_VALUE => $siteLevel];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeStr, self::LBL_ZABBIX_MAP_NAME => $lbl_map_name . $order, self::LBL_ZABBIX_MAP_VALUE => $site->map_name];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeMap, self::LBL_ZABBIX_MAP_NAME => $lbl_map_id . $order, self::LBL_ZABBIX_MAP_VALUE => $site->map_id];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeInt, self::LBL_ZABBIX_MAP_NAME => $lbl_parent_map_id . $order, self::LBL_ZABBIX_MAP_VALUE => $siteParentOrder];
$segments = CmsSiteStructure::getChildElement($site->map_id, $local_site_acronym); //Eg : MS-ML-ENR-APP
$siteParentOrder = $order;
foreach ($segments as $segment) {
$order++;
$segmentLevel++;
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeInt, self::LBL_ZABBIX_MAP_NAME => $lbl_map_order . $order, self::LBL_ZABBIX_MAP_VALUE => $segmentLevel];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeStr, self::LBL_ZABBIX_MAP_NAME => $lbl_map_name . $order, self::LBL_ZABBIX_MAP_VALUE => $segment->map_name];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeMap, self::LBL_ZABBIX_MAP_NAME => $lbl_map_id . $order, self::LBL_ZABBIX_MAP_VALUE => $segment->map_id];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeInt, self::LBL_ZABBIX_MAP_NAME => $lbl_parent_map_id . $order, self::LBL_ZABBIX_MAP_VALUE => $siteParentOrder];
$subsystems = CmsSiteStructure::getChildElement($segment->map_id, $local_site_acronym); //Eg : MS-ML-ENR-APP-ATM
$siteParentOrder = $order;
foreach ($subsystems as $subsystem) {
$order++;
$subsystemLevel++;
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeInt, self::LBL_ZABBIX_MAP_NAME => $lbl_map_order . $order, self::LBL_ZABBIX_MAP_VALUE => $subsystemLevel];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeStr, self::LBL_ZABBIX_MAP_NAME => $lbl_map_name . $order, self::LBL_ZABBIX_MAP_VALUE => $subsystem->map_name];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeMap, self::LBL_ZABBIX_MAP_NAME => $lbl_map_id . $order, self::LBL_ZABBIX_MAP_VALUE => $subsystem->map_id];
$fields[] = [self::LBL_ZABBIX_MAP_TYPE => $typeInt, self::LBL_ZABBIX_MAP_NAME => $lbl_parent_map_id . $order, self::LBL_ZABBIX_MAP_VALUE => $siteParentOrder];
}
}
}
}
}
Как вы можете видеть $ fields [] повторяется на каждом внутреннем уровне.
Могу ли я сделать это более коротким, лучшим способом?