<?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>";
来填写字母&#39; A&#39;返回,但如果我输入echo "<p>Letter: {$letters}</p>";
,我将收到错误。
我的重点是第13行,{ echo "<li>$array [$key] = $value"; }
为什么这不会返回错误?
未指定'$array'
中的任何地点,从未分配'$key'
,且未指定'$value'
中的地点。
我刚开始学习PHP&amp; MySQL前几天。 任何帮助都非常受欢迎,因为我正在努力学习并希望继续阅读本书的下一部分,但我需要首先了解这一点。
〜谢谢!
答案 0 :(得分:1)
这三个变量都是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
设置为每个匹配值。
答案 1 :(得分:1)
所有这三个变量都是标量值(字符串或数字),因此直接打印它们没有问题。
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
将是字符串或整数。同样,所有这些都可以毫无问题地打印出来。
答案 2 :(得分:1)
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标签未关闭。请使用此
echo "<li>$array [$key] = $value </li>";
答案 3 :(得分:1)
首先这个
echo "<p>Letter: {$letters}</p>";
返回错误,因为您尝试回显整个数组。它不能用echo做。
此代码
foreach($list as $key => $value)
{ echo "<li>$array [$key] = $value"; }
echo '</ul>';
}
是有效的,因为每个值都有自己的密钥。如果您没有为某个值定义键,则会自动添加该键。 你说你知道这有效:
echo "<p>Letter: {$letters[0]}</p>";
“0”是键,它在阵列初始化期间自动添加。键不需要是字符串就可以成为某个值的键。
答案 4 :(得分: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'
*/