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

时间:2013-08-28 15:56:44

标签: php arrays foreach

我有一个数据库调用,我试图找出$key => $valueforeach循环中的作用。

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

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

输出与:

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

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

8 个答案:

答案 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)

如果数组如下:

  • $ featured [“fruit”] =“orange”;
  • $ featured [“fruit”] =“banana”;
  • $ featured [“vegetable”] =“胡萝卜”;

$ 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            
}