怎样根据$hello数据将$str层层展开?<?php $my_arr=array(); $str="DIR_FS_AAA . DIR_WS_CLASSES";
$hello=array(
"DIR_FS_AAA"  =>"DIR_WS_TEMPLATE.'includes/'",
"DIR_WS_CLASSES" =>"DIR_WS_ADMIN.'helloworld'",
"DIR_WS_TEMPLATE" =>"template/",
"DIR_WS_ADMIN" =>"admin/"
);//怎样得到这样的结果数组:  $my_arr=array(
  "DIR_FS_AAA . DIR_WS_CLASSES",
  "DIR_WS_TEMPLATE.'includes/'.DIR_WS_TEMPLATE.'includes/'",
  "template/includes/admin/includes/"
  );?>

解决方案 »

  1.   


    $my_arr[] = $str;
    $tmp = preg_replace("/[A-Z_]+/e", "\$hello['\\0']", $str);
    $my_arr[] = $tmp;
    $tmp = preg_replace("/[\"']?\s*\.?\s*([A-Z_]+)\s*\.?\s*[\"']/e", "\$hello['\\1']", $tmp);
    $my_arr[] = $tmp;//test
    print_r($my_arr);
    /**Array
    (
        [0] => DIR_FS_AAA . DIR_WS_CLASSES
        [1] => DIR_WS_TEMPLATE.'includes/' . DIR_WS_ADMIN.'helloworld'
        [2] => template/includes/admin/helloworld'
    )/**/
      

  2.   

    没道理啊
    第二步 为什么是 "DIR_WS_TEMPLATE.'includes/'.DIR_WS_TEMPLATE.'includes/'"
    DIR_WS_CLASSES 对应的是 DIR_WS_ADMIN.'helloworld'
      

  3.   

    如果那些歌大写的都是define的,是不是要把引号去掉。或者适当的用引号
      

  4.   

    e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码
    看不懂
      

  5.   

    这样才具一把性$my_arr = array();$str="DIR_FS_AAA . DIR_WS_CLASSES";
    $hello = array(
      "DIR_FS_AAA"     =>"DIR_WS_TEMPLATE.'includes/'",
      "DIR_WS_CLASSES"    =>"DIR_WS_ADMIN.'helloworld'",
      "DIR_WS_TEMPLATE"    =>"template/",
      "DIR_WS_ADMIN"        =>"admin/"
    );do {
      $my_arr[] = $old = $str;
      $str = strtr($str, $hello);
    }while($old != $str);print_r($my_arr);Array
    (
        [0] => DIR_FS_AAA . DIR_WS_CLASSES
        [1] => DIR_WS_TEMPLATE.'includes/' . DIR_WS_ADMIN.'helloworld'
        [2] => template/.'includes/' . admin/.'helloworld'
    )