2011-05-25 85 views
12

一个PHP中的foreach循环的例子是PHP foreach循环例如混乱

foreach ($row as $key => $value) { 
    // somecode 
} 
我无法理解什么 =>

。任何人都可以通过它如何“看到”或通过PHP进行评估来运行我? 什么是操作顺序,什么值分配给$key

是什么使得它不同于:

foreach ($row as $value) { 
    // somecode 
} 

我在逻辑上我认为的$value值将被分配到$key,那么它会被指定为的$row一排,但是这是显然是不正确......

+0

[参考 - 这个符号在PHP中意味着什么?](http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – 2011-05-25 20:25:43

回答

2

两个例子是相同的,但第一个添加了您正在查看的密钥的定义,并将其命名为$ key。

比较到array()定义,像array('key' => 'value')

如果使用第一种方法,你必须包含$关键“钥匙”,并在第二个例子中,你不知道。

9

PHP数组存储的密钥对和值:

$arr = array(
    'key1' => 'value1', 
    'key2' => 'value2' 
); 

标准foreach语法只是取值:

foreach ($arr as $value) { 
    // value1, value2 
} 

替代语法可以让你得到键以及:

foreach ($arr as $key => $value) { 
    // $key is "key1", then "key2" 
    // $value is "value1" then "value2" 
} 

查看manual entry for foreach

0
foreach ($row as $key => $value) { ..somecode..} 

以上是在一个关联数组使用,如:

array("a" => 1, "b" => 2, "c" => 3); 

在上述情况下,$关键变量分配第一值[A上的第一次迭代,B上的第二个,最后一个循环中的c](称为键),并且$ value变量被赋予第二个值[第一次迭代时为1,第二次,第二次,最后3次](称为值。)

如果他们的键分配被省略,那么$值仍然会被分配第二个值。

0

操作码来foreach密钥和值:

BCDF9C 0005: FE_RESET    (CV 0 ($array), u) -> VAR 2 
BCE014 0005: FE_FETCH    (VAR 2, u) -> VAR 3 
BCE08C 0005: OP_DATA    (u VAR 0 &(0+2208F38), u VAR 0 &(0+2208F38)) -> TMP_VAR 5 &(C8+2208F39) 
BCE104 0005: ASSIGN    (CV 2 ($value), VAR 3) -> VAR 4 
BCE17C 0005: ASSIGN    (CV 1 ($key), TMP_VAR 5) -> VAR 6 
BCE1F4 0005: JMP     (u &(BCDFA0+4)) 
BCE26C 0005: SWITCH_FREE   (VAR 2) 

操作码来foreach只值:

BCE2E4 0007: FE_RESET    (CV 0 ($array), u) -> VAR 7 
BCE35C 0007: FE_FETCH    (VAR 7, u) -> VAR 8 
BCE3D4 0007: OP_DATA    (u VAR 0 &(0+2208F38), u VAR 0 &(0+2208F38)) -> u VAR 0 &(0+2208F38) 
BCE44C 0007: ASSIGN    (CV 2 ($value), VAR 8) -> VAR 9 
BCE4C4 0007: JMP     (u &(BCE2E8+B)) 
BCE53C 0007: SWITCH_FREE   (VAR 7) 

对不起,我奇怪的操作码表示。

基本上,没有键的版本每次迭代都会分配两个较少的变量。它不分配键和临时变量,但它只是直接分配var。

20

我明白这是一个有点棘手,我有问题的理解,当我开始使用它。你使用它越多,它就越有意义。

你的阵列应该是这样的:

// "key" "value" 
// |  | 
// V  V 
$row['1'] = 'item1'; 
$row['2'] = 'item2'; 
$row['3'] = 'item3'; 
$row['4'] = 'item4'; 

键可以是任何东西,他们并不需要为数字。这样你就可以迭代数组中的所有项目而无需知道密钥!

所以,你的第一个例子可以说明如下:

//   +--- The ARRAY where all of your data is 
//   | 
//   |  +----- The KEY to access that element of the array 
//   |  | 
//   |  |  +----- The VALUE of that element 
//   |  |  | 
//   V  V  V 
foreach ($row as $key => $value){ 
    if($row[$key] == $value){ // this statement is always true 
     echo "true AGAIN!"; // and thus will always print this line 
    } 
} 

至于我的理解而来的=>是不是真的各种各样的操作数,它只是用来完成foreach环的结构。

+0

我爱图纸,但你的例子是错误的。 '$ key'实际上会包含值,而不是键。 – notJim 2011-05-25 21:01:16

+0

谢谢@notJim,你是对的,我的错误..我会修复我的答案。谢谢你指出。我把代码打在头顶上,没有先检查。 – CenterOrbit 2011-05-31 22:50:33

+0

+1 – marcio 2013-03-31 09:03:09

0

PHP Documentation

对于数组,将值分配给一个 命名密钥是使用 “=>” 操作员执行。此 运算符的优先级与其他 赋值运算符相同。

这个问题也让我很好奇在PHP中使用=>运算符的名字。

正如你所看到的文件没有明确给它一个名字。这导致我在IRC上搜索PHP频道。普遍的共识是它被称为火箭运营商。