dongqi8030 2014-06-10 22:13
浏览 56
已采纳

循环变量变量,非法字符串偏移量

I keep getting

Warning: Illegal string offset 'type' in ... on line ...

I've tried following the answers here Illegal string offset Warning PHP

by doing something like

if(isset($_POST['type_'.$i]))
     $$T['type'] = $_POST['type_'.$i];

but it still gives errors, I think it might have something to do with variable variables (it's the first time I am using them. Below is my code:

for($i = 1; $i <= 15; $i++){
    $T = 'T'.$i;

    $$T['type'] = $_POST['type_'.$i];
    $$T['hidden'] = $_POST['hidden_'.$i];
    $$T['require'] = $_POST['require_'.$i];
    if(isset($_POST['question_'.$i.'_list']))
        $$T['list'] = $_POST['quesiton_'.$i.'_list'];
}

I won't like to create arrays T1, T2 ... T15, with the following values ['type'], ['hidden'], ['require'], ['list'].

  • 写回答

2条回答 默认 最新

  • douduan6731 2014-06-10 22:19
    关注

    The problem is one of precedence. $T['type'] is resolved first, and then used as the variable name for $___.

    Since $T is a string, ['type'] is an invalid offset to get.

    You could do this:

    ${$T}['type']
    

    ... I think. I wouldn't really know, because stuff like this is what arrays were kinda made for ;)

    $T = array();
    for( $i = 1; $i <= 15; $i++) {
        $row = array(
            "type" => $_POST['type_'.$i],
            "hidden" => $_POST['hidden_'.$i],
            "require" => $_POST['require_'.$i]
        );
        if( isset($_POST['question_'.$i.'_list'])) {
            $row['question_'.$i.'_list'] = $_POST['question_'.$i.'_list'];
        }
        $T[] = $row;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥15 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)