PHP中foreach
循环的一个例子是
foreach ($row as $key => $value) {
// somecode
}
我无法理解=>
正在做什么。任何人都可以让我了解它是如何被“看到”或由PHP评估的?
什么是操作顺序,为$key
分配了什么值?
与以下内容不同的是:
foreach ($row as $value) {
// somecode
}
我逻辑上认为$value
的值会被分配给$key
,然后它会被指定为$row
的一行,但这显然是不正确的...... < / p>
答案 0 :(得分:22)
我知道这有点棘手,我在第一次使用它时遇到了解问题。你使用的越多,它就越有意义。
你的数组看起来像这样:
// "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
循环的结构。
答案 1 :(得分: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"
}
答案 2 :(得分:2)
这两个示例是相同的,但第一个示例添加了您当前正在查看的密钥的定义,并将其命名为$ key。
与array()
定义比较,例如array('key' => 'value')
如果您使用第一种方法,则您的$ key包含'key',而在第二个示例中则不包含'key'。
答案 3 :(得分:0)
foreach ($row as $key => $value) { ..somecode..}
以上用于关联数组,例如:
array("a" => 1, "b" => 2, "c" => 3);
在上面的例子中,$ key变量被赋予第一个值[第一次迭代时的a,第二次上的b,最后一次循环中的c](称为键),$ value变量被赋予第二个值[1在第一次迭代中,2,在第二次迭代,3在最后一次](称为值。)
如果省略了键分配,那么仍然会为$ value分配第二个值。
答案 4 :(得分: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。
答案 5 :(得分:0)
对于数组,为a赋值 命名密钥使用“=&gt;”执行 运营商。这个的优先顺序 运算符与其他运算符相同 赋值运算符。
这个问题也让我对PHP中=>
运算符的名称感到好奇。
正如您所看到的,文档没有明确地为其命名。这导致我在IRC上侦察PHP频道。普遍的共识是它被称为 rocket 运算符。