String genel PHP Maç Şablon

0 Cevap php

bana aşağıdakileri sağlayacak bir işlevi vardır:

$template = "{name}:{city}-{state}"
$string = "Tom:Some CityPlace-CA"

$out = function_I_am_looking_for($template,$string);

döner $ out zaman

Array(
    [name] => Tom
    [city] => Some CityPlace
    [state] => CA
)

Böyle bir işlevi var mı?

-------- DÜZENLEME -----------

Yani insanlar konuştum ve ben bu kalıbı gibi bir şey görmek dont like beri, ben sona erecektir. Hiçbir işlevi yerleşik var, ancak ben birini alay etmedi, ve o iş yapar. Rafine çekinmeyin, size düzenlemeleri yorum lütfen.

function genaric_match($template,$string,$varStart="{{",$varEnd="}}"){


  $template = str_replace($varStart,"|~|`",$template);
  $template = str_replace($varEnd,"`|~|",$template);

  $t=explode("|~|",$template);

  $temp="";
  $i=0;
  foreach ($t as $n=>$v){
    $i++;
    if (($i==count($t)||($i==(count($t)-1)&&$t[$n+1]==""))&&substr($v,0,1)=="`"&&substr($v,-1)=="`"){
      //Last Item
      $temp.="(?P<".substr($v,1,-1).">.++)";

    }elseif(substr($v,0,1)=="`"&&substr($v,-1)=="`"){
      //Search Item
      $temp.="(?P<".substr($v,1,-1).">[^".$t[$n+1]."]++)";

    }else{
      $temp.=$v;
    }

  }
  $temp="~^".$temp."$~";

  preg_match($temp, $string, $matches);

  return $matches;

}

Bu örnek,

print_r(genaric_match("{{name}}:{{city}}-{{state}}","Tom:Some CityPlace-CA"));

İade

Array
(
    [0] => Tom:Some CityPlace-CA
    [name] => Tom
    [1] => Tom
    [city] => Some CityPlace
    [2] => Some CityPlace
    [state] => CA
    [3] => CA
)

0 Cevap