繁体   English   中英

php即使var是一个数组也不能使用字符串偏移量作为数组

[英]php Cannot use string offset as an array even if var is an array

读取特殊键时出现此错误,但是我的var是一个数组。

这是我的代码:

while($d <= count($nom)) {
    $last_d=$d;
    $nomdata = 'data_'.$d;
    $$nomdata = array();

    $di = 1;
    while($di <= count($data)) {
       if($data[$di][2] == sprintf('%08d', $d)) {
           array_push($$nomdata,$data[$di]);
       }
       $di++;
    }

    if(!empty($$nomdata)) {
        # THIS WON'T WORK -> echo '<br>i:'.$$nomdata[1][2].'<br>';
        # BUT THIS IS WORKING ↓
        print_r($$nomdata);
    }

    $d++;
}

当我使用print_r时,我拥有想要的多维数组。

Array
(
[0] => Array
    (
        [0] => 01556
        [1] => 1
        [2] => 00000002
        [3] =>           
        [4] => 34
        [5] => 0
        [6] => 2016/09/01  10:19:11
    )

[1] => Array
    (
        [0] => 01566
        [1] => 1
        [2] => 00000002
...

但是,当我调用$$ nnomdata [1] [2](或$ data_2 [1] [2])时,出现此错误:

Fatal error: Cannot use string offset as an array

我真的不明白。 第一个数组$ data是相同的类型(多维),一切正常。 我可以读取$ data [1] [2],但是由于我将其传送到$ data_1,$ data_2中,因此无法再这样读取了。 但是当我使用print_r键时,键似乎还可以。

提前致谢。

这可能发生在较旧的php版本中。 $nomdata是字符串

当您访问$$nomdata php $$nomdata存储在$nomdata名称返回变量

当您访问$$nomdata[x] php尝试获取$nomdata[x]作为变量名

示例PHP 5.0

<?php

$test = array(1, 2, 3, 4, 5, 6, 7, 8, 9);

$array = 'test';

var_dump( $$array );    // array
var_dump( $$array[0] ); // Undefined variable: t
var_dump( $$array[5] ); // Uninitialized string offset:  5

示例PHP 7.0.5

$test = array(1, 2, 3, 4, 5, 6, 7, 8, 9);

$array = 'test';

var_dump( $$array );    // array
var_dump( $$array[0] ); // int(1)
var_dump( $$array[5] ); // int(6)

$myArray = $$nomdata;
var_dump($myArray[5]); //now you can access array fields

// if you want to modify them, you will need to create reference
$myArray = &$$nomdata;
$myArray[0] = 'some value'; // this will affect your source array

查看您已注释掉的行,我更改为适合您的内容。 基本上,PHP具有定义的顺序,在该顺序中,变量变量的解析在php版本之间确实有所不同。

while($d <= count($nom)) {
    $last_d=$d;
    $nomdata = 'data_'.$d;
    $$nomdata = array();

    $di = 1;
    while($di <= count($data)) {
       if($data[$di][2] == sprintf('%08d', $d)) {
           array_push($$nomdata,$data[$di]);
       }
       $di++;
    }

    if(!empty($$nomdata)) {
        # THIS WON'T WORK -> echo '<br>i:'.{$$nomdata}[1][2].'<br>';
        # BUT THIS IS WORKING ↓
        print_r($$nomdata);
    }

    $d++;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM