【问题标题】:Get Array value by string of keys通过键字符串获取数组值
【发布时间】:2011-02-26 15:20:26
【问题描述】:

我正在为我的下一个项目构建一个模板引擎,这很好。它将{tag} 替换为相应的值。

我也想替换 {tag[0][key]}。我只需要知道如何获取值,如果我有数组和键的字符串表示形式,如下所示:

$arr = array(
    0 => array(
        'key' => 'value'
    ),
    1 => array(
        'key' => 'value2'
    )
);

$tag = 'arr[0][key]';

echo($$tag);

这是一个非常简单的版本问题,希望你能理解。否则我很乐意回答有关它的任何问题。

【问题讨论】:

  • 我很困惑。您正在尝试访问我认为与 $arr[0][key] 相同的 $tag[0][key] ... 那么问题是什么?
  • 说真的,通过写{tag[0][key]} 而不是<?php echo $tag[0]['key'] ?>,你有什么收获?你认为需要重新发明它的那本来自无数可怜的其他模板引擎的小说是怎样的?
  • 模板引擎很烂。没有理由产生这样的开销,而是编写一些 php 代码。
  • @Nitroware 抱歉,{tag[0][key]} 只是一个例子。如果我有一个值为 arr[0][key] 的 var,我将如何从 $arr 中获取值? @Gordon 好吧,我有一个人在做 html,这对他来说很简单。然后我正在为它的挑战做这件事,扩展到地平线和其他东西;)
  • @Bried:PHP 一个模板引擎。在 PHP 上运行一个模板引擎就像把你的车装到一辆平板卡车的后面来开车去上班——没用的开销。

标签: php arrays templating


【解决方案1】:

我同意没有必要重新发明轮子:PHP本身就是作为模板引擎诞生的,并且仍然擅长这样做:

<?php echo $arr[0][key]; ?>

它甚至曾经有现在已弃用的形式

<?= $arr[0][key] ?>

在任何情况下,您都可以执行以下操作

$keys = array();
preg_match_all('|\[([^\]]*)\]|', $tag, $keys);
$result = $arr;
foreach ($keys[1] as $key) {
    $result = $result[$key];
}
echo "$result\n";

【讨论】:

  • 你好,你明白了。我必须承认您的 cmets 关于模板系统的有用性是非常真实的。不过,创建系统对我来说是一个巨大的挑战,我学到了很多关于静态变量、方法、currying 等等的知识!你的答案正是我想要的,谢谢!
猜你喜欢
  • 2021-08-09
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多