dotibrb048760 2013-02-10 01:43
浏览 34
已采纳

在数组中设置嵌套项

my function:

function setItem(array $arr, $item, $value, $delimiter = '.') {
    $nodes = explode($delimiter, $item);
    $code = "\$arr['".join("']['", $nodes)."'] = \$value;";
    eval($code);
    return $arr;
}

using:

$data = array();
$data = setItem($data, 'test.qwerty.sub', 'value');

Is there way without "eval"?

  • 写回答

2条回答 默认 最新

  • dorpbn1027 2013-02-10 01:49
    关注

    Yes, but it involves using references:

    function setItem(array &$arr, $path, $value, $delim = '.'){
    
      $path = explode($delim, $path);
    
      $root = &$arr;
    
      // pointer to the current item      
      $current = &$arr;
    
      foreach($path as $item){
        $current[$item] = array();
    
        // set pointer to the newly created array
        $current = &$current[$item];
      }
    
      // reached the last path component;
      // assign the value to it
      $current = $value;
    
      return $root;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题