【发布时间】:2014-12-10 15:45:08
【问题描述】:
我正在开发一个小型 CMS,它采用开发人员 stdClass 对象并相应地处理它。 stdClass 包含数组和其他对象。这些对象之一是变量对象。可能有很多变量对象。
我将只解释这一点,而不是显示代码以减少混乱。开发人员指定一个变量和一组可能进入该变量的值。用户指定的值可能是多维数组。这是如何创建变量对象的示例:
//Add variable1
$variable = $variables[] = new stdClass;
$variable->name = 'var1'; $variable->generator = 'function'; $variable->value = 'v'; $variable->enum = array (array('Mars', 9.8), array('Earth', 3.77)); $variable->description; $variable->callback = 'callback_function';
//Add variable2
$variable = $variables[] = new stdClass;
$variable->name = 'var1'; $variable->generator = 'function'; $variable->value = 'v'; $variable->enum = array (array('Mars', 9.8), array('Earth', 3.77)); $variable->description; $variable->callback = 'callback_function';
在 stdClass 的某个时刻,开发人员必须指定变量的放置位置。占位符模板如下所示:$variables[0] 选择第一个变量或$variables[0][1] 选择第一个变量,然后选择该变量中的第一个元素。我希望这是有道理的。
我必须想出一个 php 算法来遍历一段文本并将所有占位符替换为正确的值。
我的解决方案
- 将所有变量->值放入一个新数组中。我已经成功地做到了。
- 获取一段文本中的所有占位符。我被困在这一点上。我很少使用正则表达式。
-
我开始使用:
preg_match_all('/\$variables[[0-9a-zA-Z]+]/', $text, $matched_placeholders);
..但这只会匹配$variables[0],我正在尝试扩展它以匹配变体,例如:$variables[0][1] 或 $variables[0][2][0] 等。
一旦我将占位符放入一个数组并将变量值放入另一个数组。我可以做一个foreach 循环并替换所有占位符。
任何建议将不胜感激。我应该使用什么正则表达式模式来匹配这个$variables[0][2][0]...
【问题讨论】: