集合元素不能在php中通过引用获取


Collection elements cannot be taken by reference in php

我在PHP破解中有多维映射(集合)$data。我想搜索一条关键的"道路",并用替换其价值

map{ 'test' => abc};

我有作为的密钥阵列

$keys = ['meta', 'attr', 'road'];  

下面是我的地图

     $data = Map {'meta' => Map {
             'time' => 11.364,
             'count' => 3,
              'attr' => Map {
                    'id'=> 7845,
                     'road' => Map {
                         'length' => 'km',
                         'width' => 'm'
                               }
                        }
                   },
          'Assets' => [15,78,89]
        };

我尝试了以下代码,但给了我错误:

$keys = ['meta','attr'];
                $arr = &$data;
                foreach($keys as $key)
                {
                    $arr = &$arr[$key];
                }
                $arr = map{ 'test' => abc};

有什么想法我该如何实现搜索和替换算法吗?

没有测试,但我认为这会起作用。

function treeSubstitution($multi: Map<string, mixed>): Map<string, mixed> {
  $multi->mapWithKey(($k, $v) ==> $k === 'road' ? map { 'test' => 'abc' } : treeSubstitution($v));
}

这种多维地图实际上是一棵树。您需要使用树遍历算法:http://en.wikipedia.org/wiki/Tree_traversal