PHP foreach中"as $ key => $ value"和"as $ value"之间的区别

han*_*dmr 56 php arrays foreach

我有一个数据库调用,我试图找出什么$key => $value做的一个foreach循环.

我问的原因是因为这两个代码输出相同的东西,所以我试图理解为什么它是这样编写的.这是代码:

foreach($featured as $key => $value){
  echo $value['name'];
}
Run Code Online (Sandbox Code Playgroud)

这输出相同:

foreach($featured as $value) {
  echo $value['name'];
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,是什么样的区别$key => $value,或只是$value$key => $value循环.数组是多维的,如果这有所不同,我只想知道为什么$valueforeach$key循环中传递.

dji*_*ngo 80

好吧,$key => $value在foreach循环中引用关联数组中的键值对,其中键用作确定值的索引而不是像0,1,2这样的数字...在PHP中,关联数组看起来像这个:

$featured = array('key1' => 'value1', 'key2' => 'value2', etc.);
Run Code Online (Sandbox Code Playgroud)

在PHP代码中:$featured是循环的关联数组,as $key => $value意味着每次循环运行并从数组中选择一个键值对,它将键存储在局部$key变量中以在循环块内使用,并且值为局部$value变量.因此,对于我们上面的例子阵列,foreach循环将达到第一个键值对,如果你指定的as $key => $value,它会存储'key1'$key变量,'value1'$value变量.

既然你不使用$key可变的循环块内,将它添加或移除它不会改变回路的输出,但它是最好的,包括该键值对,以表明它是一个关联数组.

另请注意,as $key => $value指定是任意的.你可以替换成as $foo => $bar,当你改变了循环块内的变量引用到新的变量,它的工作很好,只要,$foo$bar.但制作它们$key$value有助于跟踪它们的含义.

  • 谢谢,这是我正在寻找的答案.当我看到它使用这种方式而不使用循环块内的`$ key`时,它只会让我感到困惑.只是用它来表示它是一个关联数组.我理解循环和数组是如何工作的.不知道为什么不使用`$ key`变量就这样使用它.我一直在使用`$ key` var来查看它返回的内容.再次感谢你 :) (3认同)

Cha*_*JRA 17

假设您有一个像这样的关联数组:

$a = array(
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => array('x'=>123)
);
Run Code Online (Sandbox Code Playgroud)

在第一次迭代中: $key="one"$value=1.

有时您需要此密钥,如果您只想要该值,则可以避免使用它.

在最后一次迭代:$key='seventeen'$value = array('x'=>123)这样进入这个第一个元素的值array值,你需要一个key,X在这种情况下:$value['x'] =123.


Ahm*_*eri 9

需要提到一个非常重要的地方,它需要key => valueforeach循环中使用该对.假设您要将新的/子元素添加到数组中的现有项(在另一个键中)$features.您应该执行以下操作:

foreach($features as $key => $feature) {
    $features[$key]['new_key'] = 'new value';  
} 
Run Code Online (Sandbox Code Playgroud)


而不是这个:

foreach($features as $feature) {
    $feature['new_key'] = 'new value';  
} 
Run Code Online (Sandbox Code Playgroud)

这里的最大区别在于,在第一种情况下,您通过主数组本身访问数组的子值,并使用当前由数组指针指向的元素的.

在第二个(它不能用于此目的)中,您将数组中的子值分配给临时变量$feature,该变量在每次循环迭代后未设置.


sar*_*gas 7

区别在于

foreach($featured as $key => $value){
 echo $value['name'];
}
Run Code Online (Sandbox Code Playgroud)

您可以$key从其键值对中操纵每个迭代的值.就像@djiango回答一样,如果你没有操纵每个值$key,那么循环的结果将完全相同

foreach($featured as $value) {
  echo $value['name']
}
Run Code Online (Sandbox Code Playgroud)

来源: 您可以从PHP文档中读取它:

第一个表单循环遍历array_expression给出的数组.在每次迭代中,当前元素的value>被赋值为$ value,内部数组指针被提前> 1(因此在下一次迭代中,您将看到下一个元素).*

第二种形式还将在每次迭代时将当前元素的键分配给$ key变量.


如果您正在操作的数据是具有自定义键的数组,则可以将它们打印到屏幕,如下所示:

$array = ("name" => "Paul", "age" => 23);

foreach($featured as $key => $value){
 echo $key . "->" . $value;
}
Run Code Online (Sandbox Code Playgroud)

应打印:

name->Paul

age->23

你也无法foreach($featured as $value)用同样的方式做到这一点.因此,请考虑上面的格式,以便在需要时操作键.

干杯