PHP中的“as $ key => $ value”和“as $ value”之间的区别

我有一个数据库调用,我想弄清楚$key => $valueforeach循环中做了什么。

我问的原因是因为这两个代码输出相同的东西,所以我想明白为什么这样写。 代码如下:

 foreach($featured as $key => $value){ echo $value['name']; } 

这个输出与以下相同:

 foreach($featured as $value) { echo $value['name'] } 

所以我的问题是, $key => $valueforeach循环中的$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一个键值对时,它将该键存储在本地$keyvariables在循环块中使用,并在本地$valuevariables中使用。 因此,对于上面的示例数组,foreach循环会到达第一个键值对,如果您指定as $key => $value ,它将在$keyvariables中存储'key1'as $key => $value存储'value1'variables。

由于在循环块中不使用$keyvariables,因此添加或删除循环的输出不会改变循环的输出,但最好包含键值对以显示它是关联数组。

还要注意, as $key => $value名称是任意的。 你可以用as $foo => $barreplace它,只要你将循环块内的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”