为什么" foreach"不要回声?

时间:2018-02-06 17:06:59

标签: php foreach

学习php

<?php
     $a = 3;
     if ($a>1){
        $arr = array (1,2,3);
     }
     foreach ($arr as $b) {
        echo $b[0];
        echo $b[1];
        echo $b[2];
     }
     var_dump($arr);
      ?>

我不知道为什么它不能在foreach中回应? 但var_dump($arr)仍然以结果:

运行
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }

但是当我写道:$ arr []它可以运行。

<?php
 $a = 3;
 if ($a>1){
    $arr[]= array (1,2,3);
 }
 foreach ($arr as $b) {
    echo $b[0];
    echo $b[1];
    echo $b[2];
 }
 var_dump($arr); 
  ?>

结果:

123
array(1) { [0]=> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } }

它们与var_dump的结果相同。那么$arr$arr[]之间的区别是什么?

2 个答案:

答案 0 :(得分:1)

这两行:

$arr = array (1,2,3);

$arr[]= array (1,2,3);

不等同。仔细查看两个var_dump输出,您将看到差异。

在前者中,您创建了一维数组 - 当您尝试遍历它时,您将获得一个迭代,$b设置为三个值中的每一个( 1 , 2 3 。每次$b都是整数。任何&#34;索引&#34;它将返回null,因为您不能使用标量值(字符串除外)。这是defined in the manual here

  

取消引用非标准字符串的标量值的数组会产生NULL,即不发出错误消息。

当你回显 null 时,没有任何反应。它相当于一个空字符串,因此不会产生任何输出。

在第二种情况下,您要创建两个维数组。写

$arr[]= array (1,2,3);

$arr为空时与写

相同
$arr = array(array (1,2,3));

这一次,当你循环它时,你得到一次迭代,$b设置为内部数组。现在,回显$b[0]$b[1]$b[2]指的是数组中的整数,因此您得到了预期的输出

  

123

答案 1 :(得分:0)

使用此代码而不是您上面写的:

<?php
     $a = 3;
     if ($a>1){
        $arr = array (1,2,3);
     }
     foreach ($arr as $b) {
        echo $b;
        echo '<br>';
     }
     var_dump($arr);
?>