Перенос элементов в один и тот же массив в несколько циклов - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть массив с именем $ 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 [] повторяется на каждом внутреннем уровне.

Могу ли я сделать это более коротким, лучшим способом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...