65

我有一个数据库调用,我试图弄清楚$key => $value它在foreach循环中做了什么。

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

1)在foreach使用中$key => $value

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

这与以下输出相同:

2) 仅在 foreach 中使用$value

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

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

4

8 回答 8

89

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

$featured = array('key1' => 'value1', 'key2' => 'value2', etc.);

在 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有助于跟踪它们的含义。

于 2013-08-28T16:01:42.393 回答
20

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

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

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

有时你需要这个键,如果你只想要值,你可以避免使用它。

在最后一次迭代中 :$key='seventeen'因此$value = array('x'=>123)要获取此值中第一个元素的array值,您需要 a key, x 在这种情况下:$value['x'] =123

于 2013-08-28T16:05:02.823 回答
12

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

foreach($features as $key => $feature) {
    $features[$key]['new_key'] = 'new value';  
} 


而不是这个:

foreach($features as $feature) {
    $feature['new_key'] = 'new value';  
} 

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

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

于 2015-06-11T06:25:19.127 回答
8

不同的是,在

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

您可以$key从其键值对中操纵每次迭代的值。就像@djiango 回答的那样,如果您不操纵每个值$key,则循环的结果将与

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

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

第一种形式循环遍历由 array_expression 给出的数组。在每次迭代中,当前元素的值 > 分配给 $value 并且内部数组指针提前 >one(因此在下一次迭代中,您将查看下一个元素)。*

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


如果您正在操作的数据是带有自定义键的数组,您可以像这样将它们打印到屏幕上:

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

foreach($featured as $key => $value){
 echo $key . "->" . $value;
}

应该打印:

name->Paul

age->23

而且您将无法轻松做到这一点foreach($featured as $value)。所以考虑上面的格式是一种在需要时操作键的便捷方式。

干杯

于 2014-02-03T21:43:22.293 回答
4

假设你有一个这样的数组:

$array = (0=>'123',1=>'abc','test'=>'hi there!')

在您的 foreach 循环中,每个循环将是:

$key = 0, $value = '123'
$key = 1, $value = 'abc'
$key = 'test', $value = 'hi there!'

当您需要知道数组键时,这非常有用。

于 2013-08-28T16:04:06.850 回答
4

示例数组:左边是键,右边是我的值

$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            
}
于 2019-12-24T05:27:24.487 回答
2

如果数组看起来像:

  • $featured["fruit"] = "橙子";
  • $featured["fruit"] = "香蕉";
  • $featured["vegetable"] = "胡萝卜";

$key 将保存每个数组值(橙、香蕉或胡萝卜)的类型(水果或蔬菜)

于 2013-08-28T16:05:01.643 回答
1

这里$key将包含与$featured中的$value关联的$key。不同的是,现在你有了那把钥匙。

array("thekey"=>array("name"=>"joe"))

这里$value

array("name"=>"joe")

$key是“钥匙”

于 2013-08-28T16:00:22.867 回答