Beispiel #1
0
 public static function parse($string, $args, $filterCallback = null)
 {
     $argsIsObject = is_object($args);
     if (!$argsIsObject && !is_array($args)) {
         $args = array($args);
     }
     if ($args === null || !$argsIsObject && !count($args)) {
         return $string;
     }
     $internalCounter = 0;
     $result = '';
     $parts = explode('%', $string);
     $isPara = true;
     $replaces = array();
     $texts = array();
     foreach ($parts as $part) {
         $isPara = !$isPara;
         if (!$isPara) {
             $result .= $part;
         } else {
             if ($part === '') {
                 $result .= '%';
             } else {
                 $type = $part[0];
                 if (strlen($part) > 1) {
                     $index = mb_substr($part, 1);
                     if (substr($index, 0, 1) == ':') {
                         $index = substr($index, 1);
                     }
                 } else {
                     $index = $internalCounter++;
                 }
                 if ($argsIsObject) {
                     $val = $args->{$index};
                 } else {
                     $val = $args[$index];
                 }
                 $replaces[] = array($type, $val);
                 $texts[] = $result;
                 $result = '';
             }
         }
     }
     $lastText = $result;
     if ($replaces && $filterCallback != null) {
         $replaces = call_user_func($filterCallback, $replaces);
     }
     foreach ($replaces as $key => $replace) {
         if (!is_array($replace)) {
             continue;
         }
         $type = $replace[0];
         $val = $replace[1];
         if ($type == 'i') {
             $val = intval($val);
         } else {
             if ($type == 'f') {
                 $val = floatval($val);
             } else {
                 if ($type == 'b') {
                     $val = intval($val);
                 } else {
                     if ($type == 'I') {
                         $val = implode(',', ArrayTools::prepare($val, 'int', array('excludeEmpty' => true)));
                     } else {
                         if ($type == 'F') {
                             $val = implode(',', ArrayTools::prepare($val, 'float', array('excludeEmpty' => true)));
                         } else {
                             if ($type == 'R') {
                                 $val = implode(',', $val);
                             }
                         }
                     }
                 }
             }
         }
         $replaces[$key] = $val;
     }
     $result = '';
     foreach ($texts as $key => $text) {
         $result .= $text . $replaces[$key];
     }
     return $result . $lastText;
 }