rules = $schema; } public function convert($data) { foreach ($this->rules['rules'] as $tag => $tag_rules) { if (!array_key_exists($tag, $data['zabbix_export'])) { continue; } $data['zabbix_export'][$tag] = $this->addDefaultValue($data['zabbix_export'][$tag], $tag_rules); } return $data; } /** * Add default values in place of missed tags. * * @param mixed $data Import data. * @param array $rules XML rules. * * @return mixed */ protected function addDefaultValue($data, array $rules) { if ($rules['type'] & XML_ARRAY) { foreach ($rules['rules'] as $tag => $tag_rules) { if (array_key_exists($tag, $data)) { $data[$tag] = $this->addDefaultValue($data[$tag], $tag_rules); } elseif (array_key_exists('ex_default', $tag_rules)) { $data[$tag] = (string) call_user_func($tag_rules['ex_default'], $data); } elseif (array_key_exists('default', $tag_rules)) { $data[$tag] = (string) $tag_rules['default']; } else { $data[$tag] = (($tag_rules['type'] & XML_STRING) ? '' : []); } } } elseif ($rules['type'] & XML_INDEXED_ARRAY) { $prefix = $rules['prefix']; foreach ($data as $key => $value) { $data[$key] = $this->addDefaultValue($value, $rules['rules'][$prefix]); } } return $data; } }