学习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[]
之间的区别是什么?
答案 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);
?>