读取特殊键时出现此错误,但我的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中传输了它,所以我不能再读它了。但是当我打印它们时,键似乎没问题。
提前致谢。
答案 0 :(得分:0)
这可能发生在较旧的PHP版本中。
$nomdata
是字符串
当您访问$$nomdata
时,php会根据$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
答案 1 :(得分:0)
查看您注释掉的行,我改为适合您的内容。基本上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++;
}