【问题标题】:How can I use a string within the tree of an array in PHP?如何在 PHP 中的数组树中使用字符串?
【发布时间】:2019-09-02 04:12:23
【问题描述】:

我正在获取 PHP 中某个值的路径,但不确定如何将数组与字符串路径结合起来?下面给了我一个值。

var_dump($array['boo']['far'][0]); // works

虽然这些都没有给我一个有效的(甚至是有效的 PHP)。

$path = "['boo']['far'][0]";
var_dump($array.$path); // doesn't work
var_dump($array{$path}); // doesn't work
var_dump(eval($array.$path)); // doesn't work

有什么想法吗?

【问题讨论】:

    标签: php arrays tree


    【解决方案1】:

    如果路径的字符串组件相当简单,您可以使用preg_match_all 将路径解析为组件,然后递归遍历数组的各个级别以找到所需的元素:

    $array['boo']['far'][0] = "hello world!\n";
    $path = "['boo']['far'][0]";
    
    preg_match_all("/\['?([^\]']+)'?\]/", $path, $matches);
    $v = $array;
    foreach ($matches[1] as $p) {
        $v = $v[$p];
    }
    echo $v;
    

    输出:

    hello world!
    

    Demo on 3v4l.org

    除此之外,您唯一真正的选择是eval。您可以使用eval 来回显该值,或将其分配给另一个变量。例如,

    $array['boo']['far'][0] = "hello world!\n";
    $path = "['boo']['far'][0]";
    eval("echo \$array$path;");
    eval("\$x = \$array$path;");
    echo $x;
    $y = eval("return \$array$path;");
    echo $y;
    

    输出:

    hello world!
    hello world!
    hello world!
    

    Demo on 3v4l.org

    【讨论】:

    • 我认为 eval() 是唯一的方法。谢谢!
    • @ScottFoster 不确定您是否看到,但我只是用另一种方式进行了编辑。如果可以的话,最好避免eval
    • 我去看看。
    【解决方案2】:

    你有一个数组

    根据你想用它做什么,你可以将字符串添加为第一个索引的 part

    $result = $array['boo']['far'][0] . $path;
    

    它到数组的下一个索引:

    array_push($array['boo']['far'], $path);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      相关资源
      最近更新 更多