PHP中的“as $ key => $ value”和“as $ value”之间的区别
我有一个数据库调用,我想弄清楚$key => $value
在foreach
循环中做了什么。
我问的原因是因为这两个代码输出相同的东西,所以我想明白为什么这样写。 代码如下:
foreach($featured as $key => $value){ echo $value['name']; }
这个输出与以下相同:
foreach($featured as $value) { echo $value['name'] }
所以我的问题是, $key => $value
或foreach
循环中的$key => $value
的区别是什么。 该数组是多维的,如果这有所作为,我只是想知道为什么在foreach
循环中将$key
传递给$value
。
那么,foreach循环中的$key => $value
是指关联数组中的键值对,其中键用作确定值的索引,而不是像0,1,2,… In PHP,关联数组看起来像这样:
$featured = array('key1' => 'value1', 'key2' => 'value2', etc.);
在PHP代码中: $featured
是循环的关联数组,并且as $key => $value
意味着每次循环运行并从数组中select一个键值对时,它将该键存储在本地$key
variables在循环块中使用,并在本地$value
variables中使用。 因此,对于上面的示例数组,foreach循环会到达第一个键值对,如果您指定as $key => $value
,它将在$key
variables中存储'key1'
在as $key => $value
存储'value1'
variables。
由于在循环块中不使用$key
variables,因此添加或删除循环的输出不会改变循环的输出,但最好包含键值对以显示它是关联数组。
还要注意, as $key => $value
名称是任意的。 你可以用as $foo => $bar
replace它,只要你将循环块内的variables引用改变为新variables$foo
和$bar
,它就可以正常工作。 但是,让他们$key
和$value
有助于跟踪他们的意思。
假设你有一个像这样的关联数组:
$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
。
要提到在foreach
循环中使用key => value
对的一个非常重要的地方。 假设您想要在$features
数组中添加一个新的/子元素到另一个键中的现有项目。 您应该执行以下操作:
foreach($features as $key => $feature) { $features[$key]['new_key'] = 'new value'; }
而不是这个:
foreach($features as $feature) { $feature['new_key'] = 'new value'; }
这里最大的区别在于,在第一种情况下,您通过主数组本身访问数组的子值,并使用数组指针指向的元素的键 。
而在第二个( 这不适用于此目的 )您将数组中的子值分配给一个临时variables$feature
,这是每个循环迭代后未设置。
不同的是,
foreach($featured as $key => $value){ echo $value['name']; }
你可以从键值对中操作每个迭代的$key
key的值。 像@djiango回答,如果你不操纵每个值的$key
,循环的结果将完全相同
foreach($featured as $value) { echo $value['name'] }
来源:您可以从PHP文档中阅读:
第一种forms在由array_expression给出的数组上循环。 在每一次迭代中,当前元素的值被赋值为$值,而内部数组指针被前进一个(所以在下一次迭代中,你将看到下一个元素)。
第二种forms将在每次迭代时将当前元素的键另外分配给$ keyvariables。
如果您正在操作的数据是带有自定义键的数组,则可以将它们打印到屏幕上,如下所示:
$array = ("name" => "Paul", "age" => 23);
foreach($featured as $key => $value){ echo $key . "->" . $value; }
应该打印:
name->Paul
age->23
而且你也不能用foreach($featured as $value)
来做到这一点。 所以考虑上面的格式是一种方便的方法来在需要时操纵键。
干杯
假设你有这样一个数组:
$array = (0=>'123',1=>'abc','test'=>'hi there!')
在你的foreach循环中,每个循环都是:
$key = 0, $value = '123' $key = 1, $value = 'abc' $key = 'test', $value = 'hi there!'
当你需要知道数组密钥的时候,这非常棒。
如果数组看起来像:
- $ featured [“fruit”] =“orange”;
- $ featured [“fruit”] =“香蕉”;
- $ featured [“vegetable”] =“胡萝卜”;
$键将保存每个数组值(橙,香蕉或胡萝卜)的types(水果或蔬菜)
这里的$ key将包含与$特征中的$ value关联的$ key 。 不同的是,现在你有这个钥匙。
array("thekey"=>array("name"=>"joe"))
这里的$值是
array("name"=>"joe")
$ key是“thekey”