为什么这个 php 数组没有返回错误?
Why is this php array not returning an error?
<?php
$letters = array( 'A', 'B', 'C' );
$numbers = array( 1, 2, 3 );
$matrix = array( 'Letter' => $letters, 'Number' => $numbers );
echo "<p>Start : {$matrix['Letter'][0]}</p>";
foreach($matrix as $array => $list)
{
echo'<ul>';
foreach($list as $key => $value)
{
echo "<li>$array [$key] = $value";
}
echo '</ul>';
}
?>
我需要帮助来理解这段代码,基本上我对第 13 行的工作方式感到困惑。
What I see:
'$value' = non-key values of '$list'
'$list' = non-key values of '$matrix'
'$matrix' = $letters, $numbers
Therefore '$value' = $letters, $numbers
'$array' = key values of '$list'
Therefore '$array' = 'Letter', 'Number'
我知道我可以输入 echo "<p>Letter: {$letters[0]}</p>";
来返回字母 'A',但是如果我输入 echo "<p>Letter: {$letters}</p>";
,那么我会收到一个错误。
我关注的是第13行,{ echo "<li>$array [$key] = $value"; }
为什么不返回错误?
未指定 '$array'
中的位置,从未分配 '$key'
,并且未指定 '$value'
中的位置。
我几天前才开始学习PHP & MySQL。
非常感谢任何帮助,因为我正在努力学习并想继续阅读本书的下一部分,但我需要先了解这一点。
~谢谢!
所有这三个变量都是foreach
构造为循环主体临时定义的变量,并且它们中的每一个都是数字或字符串,而不是数组。
http://php.net/manual/en/control-structures.foreach.php
foreach($matrix as $array => $list)
上面一行定义了循环体的变量$array
和$list
; $array
是一个字符串,依次设置给$matrix
的每个键; $list
是每个键对应的值。
foreach($list as $key => $value)
同样,这在循环体内定义了变量$key
和$value
; $key
一次设置为 $list
的每个键, $value
设置为每个匹配值。
这三个变量都是标量值(字符串或数字),因此直接打印它们没有问题。
foreach($matrix as $array => $list)
看看 foreach
是如何工作的。此处名称不明确的 $array
将具有以下两个值之一:"Letter"
或 "Number"
。显然它们都可以毫无问题地打印出来。
foreach($list as $key => $value)
此处 $list
将是 array( 'A', 'B', 'C' )
或 ( 1, 2, 3 )
。在任一情况下,$key
将具有值 0
、1
或 2
之一,并且 $value
将是字符串或整数。同样,所有这些都可以毫无问题地打印出来。
foreach($matrix as $array => $list)
{
//$array is String "Letter" and $list is array $letters for first iteration
//$array is String "Number" and $list is array $numbers for second iteration
echo'<ul>';
foreach($list as $key => $value)
{
//when $list=$letters
//1st iteration:$key =0 and value 'A'; 2nd iteration :$key=1 and $value= 'B'.....
//finally
//$array means "Letter"
//$key mean 0
//$value mean "A"
//and loop goes on
echo "<li>$array [$key] = $value";
//result
//<li>Letter[0] = A;
//<li>Letter[1] = B;
//.............
}
echo '</ul>';
}
希望你明白。
记住你的 li 标签不是 closed.Use this
echo "<li>$array [$key] = $value </li>";
首先这个
echo "<p>Letter: {$letters}</p>";
returns 错误,因为您试图回显整个数组。用echo是做不到的。
此代码
foreach($list as $key => $value)
{ echo "<li>$array [$key] = $value"; }
echo '</ul>';
}
有效,因为每个值都有自己的键。如果您没有为某个值定义键,那么该键将自动添加。
你说你知道这行得通:
echo "<p>Letter: {$letters[0]}</p>";
"0" 是键,在数组初始化时自动添加。键不需要是字符串才能成为某个值的键。
我错过了一个事实,即如果没有为 '$letters'
和 '$numbers'
设置键值,则默认情况下它们每个值的键都是它们的顺序。
所以通过每个循环我意识到 $list[0] = $letters
和 $list[1] = $numbers
Therefore:
'$value' = non key value of '$list[0]' = non-key value of '$letters'
'$key' = key value of '$list[0]' = key value of '$letters'
所以在某种意义上,'$list'
是分别指向'$letters'
和'$numbers'
的指针。
如果以后有人感到困惑,我已经计算出下面的每个迭代:
/*
Loop One:
Sub1:
$list[0] = $letters = 'A', 'B', 'C'
$key = '0'
$value = 'A'
Sub2:
$list[0] = $letters = 'A', 'B', 'C'
$key = '1'
$value = 'B'
Sub3:
$list[0] = $letters = 'A', 'B', 'C'
$key = '2'
$value = 'C'
Loop Two:
Sub1:
$list[1] = $numbers = '1', '2', '3'
$key = '0'
$value = '1'
Sub2:
$list[1] = $numbers = '1', '2', '3'
$key = '1'
$value = '2'
Sub3:
$list[1] = $numbers = '1', '2', '3'
$key = '2'
$value = '3'
*/
<?php
$letters = array( 'A', 'B', 'C' );
$numbers = array( 1, 2, 3 );
$matrix = array( 'Letter' => $letters, 'Number' => $numbers );
echo "<p>Start : {$matrix['Letter'][0]}</p>";
foreach($matrix as $array => $list)
{
echo'<ul>';
foreach($list as $key => $value)
{
echo "<li>$array [$key] = $value";
}
echo '</ul>';
}
?>
我需要帮助来理解这段代码,基本上我对第 13 行的工作方式感到困惑。
What I see:
'$value' = non-key values of '$list'
'$list' = non-key values of '$matrix'
'$matrix' = $letters, $numbers
Therefore '$value' = $letters, $numbers
'$array' = key values of '$list'
Therefore '$array' = 'Letter', 'Number'
我知道我可以输入 echo "<p>Letter: {$letters[0]}</p>";
来返回字母 'A',但是如果我输入 echo "<p>Letter: {$letters}</p>";
,那么我会收到一个错误。
我关注的是第13行,{ echo "<li>$array [$key] = $value"; }
为什么不返回错误?
未指定 '$array'
中的位置,从未分配 '$key'
,并且未指定 '$value'
中的位置。
我几天前才开始学习PHP & MySQL。 非常感谢任何帮助,因为我正在努力学习并想继续阅读本书的下一部分,但我需要先了解这一点。
~谢谢!
所有这三个变量都是foreach
构造为循环主体临时定义的变量,并且它们中的每一个都是数字或字符串,而不是数组。
http://php.net/manual/en/control-structures.foreach.php
foreach($matrix as $array => $list)
上面一行定义了循环体的变量$array
和$list
; $array
是一个字符串,依次设置给$matrix
的每个键; $list
是每个键对应的值。
foreach($list as $key => $value)
同样,这在循环体内定义了变量$key
和$value
; $key
一次设置为 $list
的每个键, $value
设置为每个匹配值。
这三个变量都是标量值(字符串或数字),因此直接打印它们没有问题。
foreach($matrix as $array => $list)
看看 foreach
是如何工作的。此处名称不明确的 $array
将具有以下两个值之一:"Letter"
或 "Number"
。显然它们都可以毫无问题地打印出来。
foreach($list as $key => $value)
此处 $list
将是 array( 'A', 'B', 'C' )
或 ( 1, 2, 3 )
。在任一情况下,$key
将具有值 0
、1
或 2
之一,并且 $value
将是字符串或整数。同样,所有这些都可以毫无问题地打印出来。
foreach($matrix as $array => $list)
{
//$array is String "Letter" and $list is array $letters for first iteration
//$array is String "Number" and $list is array $numbers for second iteration
echo'<ul>';
foreach($list as $key => $value)
{
//when $list=$letters
//1st iteration:$key =0 and value 'A'; 2nd iteration :$key=1 and $value= 'B'.....
//finally
//$array means "Letter"
//$key mean 0
//$value mean "A"
//and loop goes on
echo "<li>$array [$key] = $value";
//result
//<li>Letter[0] = A;
//<li>Letter[1] = B;
//.............
}
echo '</ul>';
}
希望你明白。
记住你的 li 标签不是 closed.Use this
echo "<li>$array [$key] = $value </li>";
首先这个
echo "<p>Letter: {$letters}</p>";
returns 错误,因为您试图回显整个数组。用echo是做不到的。
此代码
foreach($list as $key => $value)
{ echo "<li>$array [$key] = $value"; }
echo '</ul>';
}
有效,因为每个值都有自己的键。如果您没有为某个值定义键,那么该键将自动添加。 你说你知道这行得通:
echo "<p>Letter: {$letters[0]}</p>";
"0" 是键,在数组初始化时自动添加。键不需要是字符串才能成为某个值的键。
我错过了一个事实,即如果没有为 '$letters'
和 '$numbers'
设置键值,则默认情况下它们每个值的键都是它们的顺序。
所以通过每个循环我意识到 $list[0] = $letters
和 $list[1] = $numbers
Therefore:
'$value' = non key value of '$list[0]' = non-key value of '$letters'
'$key' = key value of '$list[0]' = key value of '$letters'
所以在某种意义上,'$list'
是分别指向'$letters'
和'$numbers'
的指针。
如果以后有人感到困惑,我已经计算出下面的每个迭代:
/*
Loop One:
Sub1:
$list[0] = $letters = 'A', 'B', 'C'
$key = '0'
$value = 'A'
Sub2:
$list[0] = $letters = 'A', 'B', 'C'
$key = '1'
$value = 'B'
Sub3:
$list[0] = $letters = 'A', 'B', 'C'
$key = '2'
$value = 'C'
Loop Two:
Sub1:
$list[1] = $numbers = '1', '2', '3'
$key = '0'
$value = '1'
Sub2:
$list[1] = $numbers = '1', '2', '3'
$key = '1'
$value = '2'
Sub3:
$list[1] = $numbers = '1', '2', '3'
$key = '2'
$value = '3'
*/