我有一个数据库调用,我试图找出$key => $value
在foreach
循环中的作用。
我问的原因是因为这两个代码都输出相同的东西,所以我试图理解为什么它是这样编写的。这是代码:
foreach($featured as $key => $value){
echo $value['name'];
}
输出与:
相同foreach($featured as $value) {
echo $value['name']
}
所以我的问题是,$key => $value
循环中$value
或foreach
之间的区别是什么。该数组是多维的,如果这有所不同,我只想知道为什么在$key
循环中将$value
传递给foreach
。
答案 0 :(得分:67)
嗯,foreach循环中的$key => $value
是指关联数组中的键值对,其中键用作确定值的索引,而不是像0,1,2,...那样的数字。在PHP中,关联数组如下所示:
$featured = array('key1' => 'value1', 'key2' => 'value2', etc.);
在PHP代码中:$featured
是循环的关联数组,as $key => $value
表示每次循环运行并从数组中选择一个键值对时,它会将密钥存储在要在循环块内使用的本地$key
变量以及本地$value
变量中的值。因此,对于上面的示例数组,foreach循环将到达第一个键值对,如果您指定as $key => $value
,它会将'key1'
存储在$key
变量和{{1}中} 'value1'
变量。
由于你没有在你的循环块中使用$value
变量,添加它或删除它不会改变循环的输出,但最好包括键值对来表明它是关联数组。
另请注意,$key
指定是任意的。您可以将其替换为as $key => $value
,只要您将循环块内的变量引用更改为新变量as $foo => $bar
和$foo
,它就可以正常工作。但制作$bar
和$key
有助于跟踪它们的含义。
答案 1 :(得分:15)
假设您有一个像这样的关联数组:
$a = array(
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => array('x'=>123)
);
在第一次迭代中:$key="one"
和$value=1
。
有时您需要此密钥,如果您只想要该值,则可以避免使用它。
在上一次迭代中:$key='seventeen'
和$value = array('x'=>123)
因此要获取此array
值中第一个元素的值,在这种情况下需要key
,x: $value['x'] =123
。
答案 2 :(得分:8)
要提及 REQUIRED 在key => value
循环中使用foreach
对的非常重要的位置。假设您要将 new / sub 元素添加到$features
数组中的现有项( in another key )中。您应该执行以下操作:
foreach($features as $key => $feature) {
$features[$key]['new_key'] = 'new value';
}
而不是:
foreach($features as $feature) {
$feature['new_key'] = 'new value';
}
大的区别在于,在第一种情况下,您通过主阵列本身使用 键 到数组指针当前指向的元素。
在第二个(不能为此目的工作)时,您将数组中的子值分配给临时变量$feature
,每个临时变量都未设置循环迭代。
答案 3 :(得分:7)
区别在于
foreach($featured as $key => $value){
echo $value['name'];
}
您可以从其键值对中操纵每个迭代的$key
的值。就像@djiango回答一样,如果你没有操纵每个值的$key
,那么循环的结果将与
foreach($featured as $value) {
echo $value['name']
}
<强>来源:强> 您可以从PHP Documentation:
中阅读第一个表单循环遍历array_expression给出的数组。在每次迭代时,当前元素的值&gt;分配给$ value,内部数组指针前进> 1(所以在下一次迭代中,你将看到下一个元素)。*
第二种形式还会在&gt;每次迭代时将当前元素的键分配给$ key变量。
如果您正在操作的数据是带有自定义键的数组,您可以将它们打印到屏幕上,如下所示:
$array = ("name" => "Paul", "age" => 23);
foreach($featured as $key => $value){
echo $key . "->" . $value;
}
应打印:
name->Paul
age->23
你无法用foreach($featured as $value)
同样轻松地做到这一点。因此,请考虑以上格式,以便在需要时操作密钥。
干杯
答案 4 :(得分:3)
假设您有一个这样的数组:
$array = (0=>'123',1=>'abc','test'=>'hi there!')
在你的foreach循环中,每个循环都是:
$key = 0, $value = '123'
$key = 1, $value = 'abc'
$key = 'test', $value = 'hi there!'
当你需要知道数组密钥时,这很棒。
答案 5 :(得分:2)
如果数组如下:
$ key将保存每个数组值(橙色,香蕉或胡萝卜)的类型(水果或蔬菜)
答案 6 :(得分:1)
此处 $ key 将包含与 $ features 中的 $ value 相关联的 $ key 。不同的是,现在你有了这把钥匙。
array("thekey"=>array("name"=>"joe"))
此处 $ value 是
array("name"=>"joe")
$ key 是“thekey”
答案 7 :(得分:0)
样本数组:左边的是键,右边的是我的值
$array = array(
'key-1' => 'value-1',
'key-2' => 'value-2',
'key-3' => 'value-3',
);
示例A:我只需要$array
foreach($array as $value) {
echo $value; // Through $value I get first access to 'value-1' then 'value-2' and to 'value-3'
}
示例B:我想要$array
foreach($array as $key => $value) {
echo $value; // Through $value I get first access to 'value-1' then 'value-2' and to 'value-3'
echo $key; // Through $key I get access to 'key-1' then 'key-2' and finally 'key-3'
echo $array[$key]; // Accessing the value through $key = Same output as echo $value;
$array[$key] = $value + 1; // Exmaple usage of $key: Change the value by increasing it by 1
}