function str_replace_first($search, $replace, $subject) { $pos = zbx_strpos($subject, $search); if ($pos !== false) { $subject = zbx_substr_replace($subject, $replace, $pos, zbx_strlen($search)); } return $subject; }
/** * Replace macros in trigger description by values. * All macros are resolved in one go. * * @param array $trigger * @param array $macroValues * * @return array */ protected function replaceMacroValues(array $trigger, array $macroValues) { $macroBegin = false; for ($i = 0; $i < zbx_strlen($trigger['description']); $i++) { $c = zbx_substr($trigger['description'], $i, 1); switch ($c) { case '{': $macroBegin = $i; break; case '}': if ($macroBegin !== false) { $macro = zbx_substr($trigger['description'], $macroBegin, $i - $macroBegin + 1); if (isset($macroValues[$macro])) { $replace = $macroValues[$macro]; } elseif ($this->isAllowedMacro($macro)) { $replace = UNRESOLVED_MACRO_STRING; } else { $replace = false; } if ($replace !== false) { $trigger['description'] = zbx_substr_replace($trigger['description'], $replace, $macroBegin, zbx_strlen($macro)); // - 1 because for loop adds 1 on next iteration $i = $macroBegin + zbx_strlen($replace) - 1; $macroBegin = false; } } break; } } return $trigger; }