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

时间:2015-02-25 14:39:56

标签: php search multidimensional-array replace hacklang

我在PHP hack中有多维地图(集合)$ 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};

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

1 个答案:

答案 0 :(得分:1)

未经测试,但我认为这样可行。

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