【问题标题】:Difference between "as $key => $value" and "as $value" in PHP foreachPHP foreach 中“as $key => $value”和“as $value”的区别
【发布时间】:2013-08-31 19:33:26
【问题描述】:

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

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

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 循环中有什么区别。该数组是多维的,如果这会有所不同,我只想知道为什么在foreach 循环中将$key 传递给$value

【问题讨论】:

  • 了解PHP arraysforeach。在您的示例中,您没有在 foreach 中使用 $key,因此您不妨选择更简单的版本。
  • 这是数组返回的内容:Array ( [0] => Array ( [id] => 7 [name] => Shoes 2 [thumbnail] => /images/dummy-thumb.jpg ) [1] => Array ( [id] => 1 [name] => Game 1 [thumbnail] => /images/dummy-thumb.jpg ) [2] => Array ( [id] => 9 [name] => Shirt 2 [thumbnail] => /images/dummy-thumb.jpg ) ) $key[0] [1] [2]$value[id] [name] [thumbnail] 对吗?

标签: php arrays foreach


【解决方案1】:

嗯,foreach 循环中的$key => $value 指的是关联数组中的键值对,其中键用作确定值的索引,而不是像 0,1,2,... 之类的数字PHP,关联数组是这样的:

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

在PHP代码中:$featured是被循环遍历的关联数组,as $key => $value表示每次循环运行并从数组中选择一个键值对时,都会将key存储在本地的@987654325在循环块内使用的@ 变量和本地$value 变量中的值。因此,对于我们上面的示例数组,foreach 循环将到达第一个键值对,如果您指定了as $key => $value,它将在$key 变量中存储'key1',在$value 变量中存储'value1'

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

另请注意,as $key => $value 指定是任意的。您可以将其替换为as $foo => $bar,只要将循环块内的变量引用更改为新变量$foo$bar,它就可以正常工作。但将它们设为 $key$value 有助于了解它们的含义。

【讨论】:

  • 谢谢,这是我一直在寻找的答案。当我看到它以这种方式使用而没有在循环块内使用$key 时,它只会让我感到困惑。只是用它来表示它是一个关联数组。我了解循环和数组的工作原理。只是为什么不使用$key 变量就以这种方式使用它。我一直在使用$key var 来查看它返回的内容。再次感谢你:)
【解决方案2】:

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

$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

【讨论】:

  • 我喜欢这个解释,但是如果我不想要值我想知道键怎么办?
【解决方案3】:

一个非常重要的地方需要foreach 循环中使用key => value 对将被提及。假设您希望将 new/sub-元素添加到 $features 数组中的现有项(在另一个键中)。您应该执行以下操作:

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


而不是这个:

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

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

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

【讨论】:

    【解决方案4】:

    区别在于

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

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

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

    来源: 你可以从PHP Documentation阅读:

    第一种形式循环遍历由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) 轻松做到这一点。因此,请考虑上述格式,以便在需要时方便地操作键。

    干杯

    【讨论】:

    • 哦,男孩,这比任何答案都更有意义,现在我明白了这背后的全部想法:D 至少有点 :D 长寿并繁荣我的朋友
    【解决方案5】:

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

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

    在你的 foreach 循环中,每个循环都是:

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

    非常适合需要知道数组键的时候。

    【讨论】:

    • 因此,我们以这种方式设置循环,以防我们需要知道 $key 是有道理的,因为这是来自 codeigniter 中模型中的一个函数。所以以后可能需要$key
    • 正确。您还可以使用键来更改数组中该键的值,或者使用它来使用相同的键将数据添加到另一个数组。
    【解决方案6】:

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

    $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 的每个值 AND 键

    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            
    }
    

    【讨论】:

      【解决方案7】:

      如果数组看起来像:

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

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

      【讨论】:

        【解决方案8】:

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

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

        这里 $value

        array("name"=>"joe")
        

        $key 是“钥匙”

        【讨论】:

          猜你喜欢
          • 2011-03-19
          • 2011-08-16
          • 2010-11-16
          • 2013-12-31
          • 2015-10-12
          • 1970-01-01
          • 2022-12-27
          • 2010-11-24
          • 2012-04-18
          相关资源
          最近更新 更多