为什么访问数组元素会在PHP中抛出array-as-string错误?

时间:2015-01-05 05:29:14

标签: php arrays string comparison

我已经做了一些搜索,但我找不到任何能够回答我问题的帖子。 为了参数起见,我使用以下代码生成了一个PHP数组:

$i = 5;
for($i = 0; $i < $j; $i++) {
   $multiArray[0][$i] = $i;
   $multiArray[1][$i] = $i;
}

当我尝试使用以下方式访问它时:

for($i = 0; $i < $j; $i++) {
   echo "$multiArray[0][$i]";
   echo "$multiArray[1][$i]";
}

我明白了:

  

注意:第3行的数组到字符串转换

     

注意:第4行的数组到字符串转换

     

... X4

当我用echo替换printf("%d", $multiArray[0][$i])时,它打印正常。为什么我必须明确地告诉PHP,当我访问的元素显然是一个int(并且PHP通过var_dump()知道它)时,我要求一个int?我没有访问数组,而是数组中的元素。

由于

3 个答案:

答案 0 :(得分:2)

Simple double quoted variable interpolation最多支持一个嵌套元素。换句话说,"foo[0][1]"被解释为"{$foo[0]}[1]"。这意味着它尝试将数组$foo[0]解释为该点的字符串,以将其插入到字符串中。

但在这里使用引号完全是荒谬的。你不想要字符串插值,你只想输出一个变量值:

echo $multiArray[0][$i];

答案 1 :(得分:0)

试试这个:

for($i = 0; $i < $j; $i++) {
 echo $multiArray[0][$i]; 
 echo $multiArray[1][$i]; 
}

答案 2 :(得分:0)

你的代码正在解析字符串而不是数组,尝试删除引号。数组之后的[]括号被认为是字符串而不是作为参数。使用下面的代码

<?php
$j = 5;
for($i = 0; $i < $j; $i++) {
   $multiArray[0][$i] = $i;
   $multiArray[1][$i] = $i;
}

for($i = 0; $i < $j; $i++) {

   echo $multiArray[1][$i];
}

希望这有助于你